我是Django的新手并开始学习。我想在[菜单],[主页],[联系人]等不同页面添加导航栏。
我怎么能用Django模板做到这一点? 我模板的一部分。
<nav>
<a href="{% url 'polls/detail' %}">Detail</a>
<a href ="{% url 'polls/index'%}">Home</a>
<a href ="{%url 'polls/contact'%}">Contact</a>
</nav>
</header>
<section>
{% if latest_question_list %}
<ul id="choice">
{% for question in latest_question_list %}
<li><a href="/polls/{{ question.id }}/">{{ question.question_test }}</a></li>
{% endfor %}
</ul>
下面是my url.conf`
patterns = [
url(r'^index/$',views.index,name='index'),
url(r'^(?P<question_id>[0-9]+)/$',views.detail,name='detail'),
url(r'^(?P<question_id>[0-9]+)/result/$',views.result,name='result'),
url(r'^(?P<question_id>[0-9]+)/vote/$',views.vote,name='vote'),
url(r'^contact/$',views.contact,name='contact'),
]` 以下是我的views.py
from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse ,Http404,HttpResponseRedirect
from .models import Question ,Choice
from django.core.urlresolvers import reverse
# Create your views here.
def index(request):
try:
latest_question_list = Question.objects.all()
except:
raise Http404("Question does not exist")
return render(request, 'polls/index.html', context= {'latest_question_list': latest_question_list})
def detail(request,question_id):
try:
question = Question.objects.get(pk=question_id)
return render(request,'polls/detail.html', context= {'question':question})
except Question.DoesNotExist:
raise Http404("Question does not exists")
def vote(request, question_id):
question = Question.objects.get(pk=question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except(KeyError,Choice.DoesNotExist):
return render(request,'polls/detail.html',{
'question':question,
'error_message':'You did not select a choice'
})
else:
selected_choice.votes+=1
selected_choice.save()
return HttpResponseRedirect(reverse('result',args=(question_id)))
def result(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/result.html', {'question': question})
def contact(request):
return render(request,'polls/contact.html')
以下是错误,我得到了 反向&#39;民意调查/详细信息&#39;参数&#39;()&#39;和关键字参数&#39; {}&#39;未找到。尝试了0种模式:[]
答案 0 :(得分:0)
尝试为urls.py中的网址指定名称,然后按照名称在模板中调用它们。
urls.py:
urlpatterns = [
url(r'^/polls/about/', views.about.as_view(), name='about'),
url(r'^/polls/contact/', views.contact.as_view(), name='contact'),
...
]
模板:
{% url 'about' %}
有关详细信息,请参阅文档:
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#url
https://docs.djangoproject.com/ja/1.9/topics/http/urls/#url-namespaces
更新的答案:
您的详细信息,投票和结果页面都指向您的问题模型的特定实例。这可以通过urls.py中的(?P<question_id>[0-9]+)
行显示,也可以作为视图函数变量的一部分显示。
您需要在视图上下文字典中将有效的question_id传递到模板,然后在{%url%}标记中包含该question_id。
例如,如果您想在索引页面上添加第一个问题详细信息的链接,则需要进行以下更改:
在views.py中:
def index(request):
try:
latest_question_list = Question.objects.all()
question = latest_question_list[0]
except:
raise Http404("Question does not exist")
return render(request, 'polls/index.html', context ={'latest_question_list': latest_question_list, 'question':question})
然后在您的模板中,您可以链接到此特定问题的详细信息,如下所示:
<a href="{% url 'detail' question_id=question.id %}">Detail</a>