用Django重建链接

时间:2013-12-29 14:13:48

标签: html django url url-parameters

我创建了一个带有URL结构的Django应用程序:

eventdetails/?event_id=94099

这会将我带到活动详情应用的索引页面。但是我的应用程序有部分,每个部分都需要使用event_id。

因此我需要一个url结构,如:

eventdetails/who/?event_id=94099

所以我仍然可以访问事件ID。

有人可以告诉我如何创建导航链接或更好的方法。

谢谢,

1 个答案:

答案 0 :(得分:2)

django的URL映射不考虑查询字符串,该字符串按原样传递给任何映射的视图。

实际上,这意味着如果你有:

url(r'^eventdetails/who/$', 'event_who', name='e-who'),
url(r'^eventdetails/$', 'event_detail', name='e-detail')

然后,您的两个视图方法都可以访问查询字符串:

def event_detail(request):
    id = request.GET.get('event_id')

def event_who(request):
    id = request.GET.get('event_id')
    if not id:
        print 'No ID!'
    else:
        print 'do stuff'
    return render(request, 'who.html')

您还可以将事件ID添加为网址本身的一部分,例如eventdetails/94099/

url(r'^eventdetails/(?P<id>\d+)/$', 'event_detail', name='e-detail')

然后您的观点将是:

def event_detail(request, id=None):
    if not id:
        print 'No ID!'
    else:
        print 'do stuff'
    return render(request, 'detail.html')

您获得的另一个好处是,您可以在模板和视图中轻松生成事件的URL:

<ul>
{% for event in events %}
    <li><a href="{% url 'e-detail' id=event.pk %}"> {{ event.name }}</a></li>
{% endfor %}
</ul>

在您看来:

def go_to_event(request, id):
    return redirect('e-detail', id=id)