0
我得到了一個錯誤, TemplateDoesNotExist在/ polls/1/ templates/polls/detail.html。我想顯示detail.html。TemplateDoesNotExist at/polls/1/
回溯是
Traceback:
File "/Users/XXX/django/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/Users/XXX/django/django/core/handlers/base.py" in _get_response
130. response = self.process_exception_by_middleware(e, request)
File "/Users/XXX/django/django/core/handlers/base.py" in _get_response
128. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/XXX/djangostudy/polls/views.py" in detail
43. 'question': obj,
File "/Users/XXX/django/django/shortcuts.py" in render
36. content = loader.render_to_string(template_name, context, request, using=using)
File "/Users/XXX/django/django/template/loader.py" in render_to_string
61. template = get_template(template_name, using=using)
File "/Users/XXX/django/django/template/loader.py" in get_template
19. raise TemplateDoesNotExist(template_name, chain=chain)
Exception Type: TemplateDoesNotExist at /polls/1/
Exception Value: templates/polls/detail.html
我forms.py就像是單選按鈕的
from django import forms
class MyForm(forms.Form):
text = forms.CharField(max_length=100,required=False,label='テキスト')
class VoteForm(forms.Form):
choice = forms.ModelChoiceField(
queryset=None,
label='選択',
widget=forms.RadioSelect,
empty_label=None,
error_messages={
'required':"You didn't select a choice.",
'invalid_choice':"invalid choice.",
},
)
def __init__(self,question,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields['choice'].queryset = question.choice_set.all()
設置是寫在detail.html,像
<!DOCTYPE html>
<h1>{{ question.question_text }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="{% url 'poll_vote' question.id %}" method="post">
<!--<form action="" method="post">-->
{% csrf_token %}
{% for choice in question.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
{% endfor %}
<!--{{ form }}-->
<input type="submit" value="Vote" />
</form>
</html>
views.py是
from django.shortcuts import render
from django.utils.html import mark_safe
from .models import Question
from django.http import HttpResponse
from django.shortcuts import Http404
from django.shortcuts import get_object_or_404,redirect
from .models import Choice
from django.views.generic import TemplateView
from django.views.generic import DetailView
from django.views.generic import ListView
from .forms import MyForm
from .forms import VoteForm
# Create your views here.
def index(request):
return render(request,'polls/index.html',{
'questions': Question.objects.all(),
})
def detail(request,pk):
obj = get_object_or_404(Question,pk=pk)
if request.method == "POST":
form = VoteForm(question=obj,data=request.POST)
if form.is_valid():
return redirect('polls:results',pk)
else:
form = VoteForm(question=obj)
return render(request,'templates/polls/detail.html',{
'form':form,
'question': obj,
})
def vote(request,pk):
pass
def results(request,pk):
obj = get_object_or_404(Question,pk=pk)
return render(request,'polls/results.html',{
'question':obj,
})
def form_test(request):
if request.method == "POST":
#request.POST???
form = MyForm(data=request.POST)
if form.is_valid():
pass
else:
form = MyForm()
return render(request,'polls/form.html',{
'form':form,
})
我想裝模板的地方,這是detail.html
return render(request,'templates/polls/detail.html',{
'form':form,
'question': obj,
})
,所以我不明白爲什麼不顯示我detail.html可以here.How解決這一問題?
THX,我的網站工作的正確!但我不明白爲什麼改變「模板/調查/ detail.html」到「民意測驗/ detail.html」可以修復錯誤。爲什麼? – mikimiki
Django在你的'polls/templates /'文件夾中搜索模板。當你使用'templates/polls/detail.html'時,Django會查找不存在的'polls/templates/templates/polls/detail.html'。你不在任何其他視圖中包含'templates',所以你不應該爲這個。 – Alasdair
想象一下,您必須在您的'polls/templates /'中搜索'templates/polls/detail.html',您的'polls/templates'中沒有任何名爲'templates'的文件夾,對嗎? 您不必指定'templates',因爲django知道,但是您必須指定'polls'作爲名稱空間,這樣django就知道這些模板是用於'polls'的。 – ShadowXsc