在django中,网址与正则表达式模式相匹配。
的url
线的一般格式是:
url(the_pattern, the_view_name_or_callable, **any_extra_arguments)
的关键点是the_pattern
,这是一个正则表达式和任何相匹配可以作为参数视图函数传递。
捕获并传递到视图函数的模式的任何部分实际上都与函数的签名(您在其中定义名称和参数的位置的def
行)匹配,这一点很重要。否则,Django会抛出一个错误。
所以,现在,用这种方式 - 让我们处理实际问题。
你想要一个网址,如/the_great_gatsby
重定向到的页面伟大的盖茨比。
的第一步是识别匹配the_great_gatsby
的图案。您可以使用[_\w]+
这意味着“一个或多个单词字符或_”,并将其插入的网址:
url(r'/[_\w]+$', views.detail, name='detail')
接下来,你必须告诉Django如何捕捉模式,并将其传递给视图的方法一个论点。
您的视图的方法是:def detail(request, movie_title)
。所以在Django在URL中/
后传进去的是(与模式匹配)与参数name movie_title
,所以我们要的是这样的:
def detail(request, movie_title)
^^^^^^^^^^^
---------------|
|
vvvvvvv
url(r'/[_\w]+$', views.detail, name='detail')
我们修改正则表达式以确保Django的捕获任何匹配,然后为其分配一个名称。要做到这一点,包正则表达式的部分(?P<name_of_variable>expression)
这样的:
url(r'/(?P<movie_title>[_\w+])$', views.detail, name='detail')
现在,无论是/
后拍摄的图像会作为参数movie_title
到views.detail
方法传递。
当然,你必须确保你的浏览功能与捕获到的字符串做正确的事。在你的情况下,你的视图方法是通过主键进行搜索,并且将无法产生任何结果(并且会引发异常),因为没有电影将标题作为主键;但这是另一个问题。
阅读[教程](https://docs.djangoproject.com/en/1.8/intro/tutorial01/),它涵盖了这个和其他基本问题。 – alexanderlukanin13