我在django中发表了一个applikation,并且我非常熟悉语言python和框架django。
我的问题是我无法弄清楚如何获取此网址:
project/2/ticket/1
我在project/2
,并在我的模板中找到了链接到project/2/ticket/1
的链接。
我得到的错误是NoReverseMatch at /project/1
,我使用的代码是:
url.py
urlpatterns = patterns('',
# Project urls below
url(r'^project/(?P<project_id>\d+)$', 'project_manager.views.project_list', name='project_list_with_ticket'),
url(r'^project/(?P<project_id>\d+)/ticket/(?P<ticket_id>\d+)$', 'project_manager.views.ticket_list', name='ticket_list'),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
views.py
def ticket_list(request, ticket_id = None):
if ticket_id:
tickets = get_list_or_404(Ticket.objects.filter(id = ticket_id))
return render(request, 'tickets/details.html', {"tickets" : tickets })
else:
return render(request, 'projects/list.html', {'projects' : projects })
我的模板
{% for ticket in tickets %}
<div class="tickets">
<a href="{% url ticket_list ticket.id %}">{{ ticket }}</a>
</div>
{% endfor %}
编辑 - 它说没有ticket_list,但有吗?
答案 0 :(得分:3)
当您需要两个变量时,您正在使用一个变量ticket_list
调用ticket.id
网址/视图。
您的模板:
<a href="{% url ticket_list ticket.id %}">{{ ticket }}</a>
您正在传递ticket.id
,并且还需要project.id
,您可以在网址中看到:
url(r'^project/(?P<project_id>\d+)/ticket/(?P<ticket_id>\d+)$', 'project_manager.views.ticket_list', name='ticket_list'),
您需要更改模板以传递URL中要求的两个变量。您还没有发布如何获得项目ID,因此我的代码可能无法完全按照发布的方式工作,但您需要这样的内容:
<a href="{% url ticket_list ticket.project.id ticket.id %}">{{ ticket }}</a>
传递变量的顺序需要与您在URL中要求的方式保持一致。由于您的网址要求project_id
,然后是ticket_id
,请确保按照上述顺序在模板中传递它们。