2013-05-21 4 views
0

Я пытаюсь использовать мою первую форму Django, в основном следуя this example. Нужно ли мне предоставлять явную форму HTML самостоятельно, или класс Django Form делает это для меня? Если да, то как?Django формы не могут найти мой шаблон

Вот моя текущая ошибка:

Internal Server Error: /showCrime/query 
Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 115, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 
    File "/Users/rik/Code/eclipse/djOakData/showCrime/views.py", line 43, in getQuery 
    return render(request, 'getQuery.html', {'form': qform}) 
    File "/Library/Python/2.7/site-packages/django/shortcuts/__init__.py", line 53, in render 
    return HttpResponse(loader.render_to_string(*args, **kwargs), 
    File "/Library/Python/2.7/site-packages/django/template/loader.py", line 170, in render_to_string 
    t = get_template(template_name) 
    File "/Library/Python/2.7/site-packages/django/template/loader.py", line 146, in get_template 
    template, origin = find_template(template_name) 
    File "/Library/Python/2.7/site-packages/django/template/loader.py", line 139, in find_template 
    raise TemplateDoesNotExist(name) 
TemplateDoesNotExist: getQuery.html 

showCrime/views.getQuery():

def getQuery(request): 

    # import pdb; pdb.set_trace() 
    if request.method == 'POST': 
     qform = simpleQ(request.post) 
     if qform.is_valid(): 
      qryData = qform.cleaned_data 

      simpleQ.NQUERY += 1 
      qurl = 'showCrime/plots/%s+%s.png' % (qryData['beat'], qryData['crimeCat']) 
      return HttpResponseRedirect(qurl) 
    else: 
     qform = simpleQ() 

    return render(request, 'getQuery.html', {'form': qform}) 

showCrime/templates/showCrime/getQuery.html

<html> 
<head> 
    <title>ShowCrime - Query</title> 
</head> 
<body> 
<h1>ShowCrime - Query</h1> 


    {% if form.errors %} 
     <p style="color: red;"> 
      Please correct the error{{ form.errors|pluralize }} below. 
     </p> 
    {% endif %} 

    <form action="/getQuery/" method="post"> 
     <table> 
      {{ form.as_table }} 
     </table> 
     {% csrf_token %} 
     <input type="submit" value="Submit query"> 
    </form> 

</body> 
</html> 
+0

Ошибка подсказывает, что Django не может найти шаблон getQuery.html. Правильно ли вы задали переменную TEMPLATE_DIRS в файле settings.py? Обратитесь к https://docs.djangoproject.com/en/1.3/ref/templates/api/ за настройку. –

+0

попробуйте шаблоны/getQuery.html – karthikr

ответ

2

Убедитесь, что ваши шаблонные погрузчики конф igured в ваших settings.py;

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
) 

Похоже, вы разместили свой шаблон в каталоге шаблонов своего приложения, а namespaced - с именем приложения. Вы должны указать пространство имен (ваше имя приложения) в вызове для рендеринга.

return render(request, 'showCrime/getQuery.html', {'form': qform}) 
+1

Тем более, что вторая половина этого ответа. +1. OP явно имеет шаблон внутри каталога 'showCrime' - поиск' getQuery.html' на корневом уровне - проблема. –

+0

@ Yuji'Tomita'Tomita, вы были правы, чтобы сосредоточиться на префиксе showCrime/'. но теперь он стал более странным: несмотря на строку в 'showCrime/urls.py', говорящую' url (r '^ query $', views.getQuery, name = 'getQuery') 'i теперь получаю 404 на' http: // 127.0.0.1: 8000/showCrime/query/'(и приведенный выше шаблон url указан как один из шаблонов, пытавшихся частью вывода отладки!) – rikb

-1

вместе с @ Эндрюсом намеком о showCrime/ префиксе в вызове render(), я был в состоянии исправить это, следуя предложению в Chap7 of the Django book использования пустой строки в HTML: <form action="" method="post">. есть какая-то чувствительность джанго к трейлинг-косу и т. д., которая остается вне меня, но это работает!