如何将变量传递给urls.py

时间:2014-10-13 16:12:06

标签: regex django url

我有一个数据库'艺术家',其中有一个表:'name','style'。 用户可以为艺术家添加任何名称。

我想在我的模板中将参数传递给url,如下所示:

<a href="{% url 'webgui.views.music' artist.name %}" style="margin-bottom: 3px" type="button"

但是可以使用参数'artist.name'动态设置URL(在urls.py中)吗?

我的urls.py其实:

url(r'^music/(\d+)/$', 'webgui.views.music'),

也许我需要通过另一个正则表达式来改变'\ d +'?

1 个答案:

答案 0 :(得分:3)

而不是使用

url(r'^music/(\d+)/$', 'webgui.views.music'),

因为 d + 代表数字,所以您应该使用

url(r'^music/?P<artist_name>[a-zA-Z0-9 \'&-]/$', 'webgui.views.music')

不要忘记修改功能

def whatever_named_it(request, artist_name):
    ...

更新:在模板中,您应该使用

{% url 'webgui.views.music' artist_name=artist.name %}

因为我们使用的是命名参数。

额外:如果您要允许任何文字作为艺术家姓名,我建议您使用slug来避免网址中的空格。这样可以更好地阅读,搜索引擎友好并避免疯狂的用户输入。编程web-app永远不会信任用户输入......永远。

对于“slugified”名称网址将是:

url(r'^music/(?P<slug>[\w-]+)/$', 'webgui.views.music')