python - Django 中的动态 URL

标签 python django url dynamic

所以我有一个项目列表,我希望所有项目在用户单击时将其引导至有关该项目的标准信息页面。我不完全理解 django 中的动态 url 系统。我的内容 html 文件称为detail.html。目标是单击电影项目,然后定向到页面标题“blahblah.com/specic_movie_title”

在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')

我可以获得更正这两段代码的帮助吗?

最佳答案

在 django 中,url 通过正则表达式模式进行匹配。

url的一般格式行是:

url(the_pattern, the_view_name_or_callable, **any_extra_arguments)

关键点是the_pattern ,这是一个正则表达式,任何匹配的内容都可以作为参数传递给 View 函数。

捕获并传递给 View 函数的模式的任何部分实际上都与函数的签名(def 行,您定义名称和参数)相匹配,这一点很重要。否则,django 将抛出错误。

现在,解决这个问题 - 让我们来处理实际问题。

您想要一个类似 /the_great_gatsby 的网址重定向到《了不起的 Gatsby 》页面。

第一步是识别与 the_great_gatsby 匹配的模式。您可以使用[_\w]+这意味着“一个或多个单词字符或 _”,并将其插入 URL:

url(r'/[_\w]+$', views.detail, name='detail')

接下来,您必须告诉 django 如何捕获该模式并将其作为参数传递给 View 方法。

您的查看方式是:def detail(request, movie_title) 。所以 django 必须传递 / 之后的内容在 url 中(并匹配模式)到参数名称 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方法。


当然,您必须确保您的 View 函数对捕获的字符串执行正确的操作。在您的情况下,您的 View 方法正在按主键进行搜索,并且将无法产生任何结果(并且会引发异常),因为没有电影将标题作为主键;但这是另一个问题。

关于python - Django 中的动态 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32941771/

相关文章:

python - Django:如何为 MySQL VARBINARY HEX 字段建模?

REST API 命名约定 : referencing unique resources with nested paths

javascript - 如何删除除第一个之外的所有 URL 哈希值?

python - 如何使用 Python 改变图像的颜色?

python - 在 python 中重命名 elif

python - 从脚本运行 Scrapy,需要帮助理解它

django - 在 Django 中保存嵌套表单

javascript - 使用 Django 中查询集的 Ajax 和 Jquery 填充选择框

python - 在 Python/Django 模板中序列化模型

ios - 如何使用自定义 NSURLProtocol 播放带 URL 的电影?