Django的导航栏

时间:2016-04-30 15:16:25

标签: django django-templates django-views

我是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种模式:[]

1 个答案:

答案 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>