Django导航栏

问题描述:

我是Django的新手,开始学习。我想将导航栏添加到不同的页面,如[菜单],[主页],[联系人]。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> 

下面ismy 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') 

下面是错误的,我得到 反转e用于'polls/detail'参数'()'和关键字参数'{}'未找到。尝试了0个模式:[]

+0

你有什么问题? –

+0

它给了我错误没有反向网址 – shankar

+0

请求网址:\t http://127.0.0.1:8080/static/polls/index 'polls \ index'找不到 – shankar

尝试为您的urls.py中的URL分配一个名称,然后在您的模板中通过名称调用它们。

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> 
+0

NoReverseMatch在/民意调查/指数/ 反向'细节'的参数'()'和关键字参数'{}'未找到。尝试1个模式:['polls /(?P [0-9] +)/ $'] 请求方法:\t GET 请求URL:\t http://127.0.0.1:8080/polls/index/ Django的版本:\t 1.9.4 异常类型: \t NoReverseMatch 异常值:\t 未找到参数'()'和关键字参数'{}'的'detail'的反转。尝试1种模式:['polls /(?P [0-9] +)/ $'] – shankar