在django中建立URL

时间:2013-02-19 16:57:48

标签: django django-templates django-views

我在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,但有吗?

1 个答案:

答案 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,请确保按照上述顺序在模板中传递它们。