2015-10-05 108 views
2

因此,我有一个项目列表,我希望所有项目都可以直接将用户导向关于该项目的标准信息页面。我并不完全了解django中的动态url系统。我的内容html文件被称为detail.html。我们的目标是点击一个电影项目,并且被定向到一个页面标题“blahblah.com/specific_movie_title”Django中的动态网址

在views.py我有:

def detail(reuqest, movie_title): 
    moviePage = Movie.objects.get(pk=movie_title) 
    return render_to_response('detail.html', {'detail':moviePage, RequestContext(request)) 

在urls.py我也行与此对应的是:

url(r'^$', views.detail, name='detail') 

我可以帮助纠正这两个代码块吗?

+1

阅读[教程](https://docs.djangoproject.com/en/1.8/intro/tutorial01/),它涵盖了这个和其他基本问题。 – alexanderlukanin13

回答

3

在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_titleviews.detail方法传递。


当然,你必须确保你的浏览功能与捕获到的字符串做正确的事。在你的情况下,你的视图方法是通过主键进行搜索,并且将无法产生任何结果(并且会引发异常),因为没有电影将标题作为主键;但这是另一个问题。

+0

优秀的答案.. –

+0

谢谢你这个很清楚!而且就是遇到了这个问题。好吧,“pk”代表主键。那么我需要那个“movie_object”行吗?我可以直接传入标题吗? –

+0

我得到它的工作!但是我的数据都没有被传递,url仍然是“~~~/detail.html” –

0

你可以配置你urlview这样

urls.py

url(r'^movie/(?P<movie_title>\w+)$', views.movie_detail, name='detail') 

views.py

def movie_detail(request, movie_title): 
    movie_object = Movie.objects.get(pk=movie_title) 
    return render(request, 'moview-detail.html', {'movie_object':movie_object} 

,并在你的HTML {% url 'app_name:detail' movie_title %}

+0

我还是收到一个“Page Not Found”的~~~/detail.html当我点击一个链接 –