0

我在 django 中做了一个应用程序,我对语言 python 和框架 django 完全陌生。

我的问题是我无法弄清楚如何获取此网址:

project/2/ticket/1

我在project/2我的模板中获得了一个链接,该链接链接到project/2/ticket/1. 我得到的错误是NoReverseMatch at /project/1,我使用的代码是:

网址.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)),

)

视图.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,但是有吗?

4

1 回答 1

3

ticket_list使用一个变量调用 URL/View - ticket.id- 当它需要两个变量时。

您的模板:

<a href="{% url ticket_list ticket.id %}">{{ ticket }}</a>

您正在传递 a ticket.id,它还需要 aproject.id如您在 URL 中看到的那样:

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 中要求它们的方式保持一致。由于您的 URL 要求 a project_id,然后是 a ticket_id,因此请确保按照上述顺序在模板中传递它们。

于 2013-02-19T17:00:54.577 回答