【问题标题】:What does this regex mean in django?这个正则表达式在 django 中是什么意思?
【发布时间】:2017-05-23 18:40:54
【问题描述】:

我正在从一本书中学习 django,并且我已经进入了高级网址,这里有一个没有解释的正则表达式:

urlpatterns = [
    url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/',
        include([
        url(r'^history/$', views.history),
        url(r'^edit/$', views.edit),
        url(r'^discuss/$', views.discuss),
        url(r'^permissions/$', views.permissions),
    ])),
]

我知道这是为了消除冗余,但它实际上是如何工作的? page_slugpage_id 从哪里得到,它们之间的 - 是什么?

【问题讨论】:

标签: python regex django django-urls


【解决方案1】:

如果您正在使用高级网址,我想您了解基本网址标记的工作原理。 每当我们处理可变 url 模式时,都会使用正则表达式模式,例如如果是博客,url 可能读作

  • domain.com/post-1/
  • domain.com/post-2/

  • domain.com/shortpost-1/
  • domain.com/shortpost-2/

等等。

我们可以在这里看到一个常见的模式,它可以与页面 slug(或前缀)和页面/帖子 ID 相关。 因此我们创建了两个变量,即 page_slug 和 page_id。 (注意:变量名称可以像其他任何地方一样重命名为您喜欢的。 因此,正则表达式被创建为/(?P&lt;page_slug&gt;\w+)-(?P&lt;page_id&gt;\w+))/' 其中:

  • ?P&lt;&gt; :定义我们正在定义一个变量
  • text> : text 是你的变量名
  • \w+ :是您的正则表达式,它定义了可接受的模式(在这种情况下,\w 代表集合中的任何内容[0-9a-zA-Z_]+ 代表任意数量的重复。如果您想了解更多信息在这我会参考https://www.ntu.edu.sg/home/ehchua/programming/howto/Regexe.html 参考和http://regexr.com/ 练习。
  • 和中间的 - 只是一个强制文本,可以替换为 -no- 看起来像 domain.com/page-no-1/强>

标记的其余部分与普通 url 类似,这意味着以给定模式 (?P&lt;page_slug&gt;\w+)-(?P&lt;page_id&gt;\w+)/ 后跟后缀的任何 url 都由上述视图处理。

例如- domain.com/post-1/history/ - 由views.history 等处理。

现在重要的部分是这些变量名称如何影响您的视图。 如果您使用基于函数的视图,您的历史视图将被定义为:

def history(request, page_slug, page_id):
        #Your code using the two variables received.
        #These might be values stored in db to dynamically fetch values

在基于类的视图中访问您使用 self.argsself.kwargs 的 url 参数,因此您可以通过 self.kwargs['page_slug']

访问它

【讨论】:

  • 很好解释,理解一切,顺便说一下,在这个例子中,我必须在每个函数中添加 page_slug 和 page_id 对吗?
  • 如何在 html 模板中使用/调用这 2 个参数(即 page_slug、page_id)?像这样:&lt;a hred="{ % url 'myapp.page' thepage - thepage_id %}" ?
【解决方案2】:

此正则表达式匹配以下网址:

/abc-def/history/ (abc goes to page_slug and def to page_id)
/ghi-jkl/edit/

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 2012-05-07
    • 1970-01-01
    • 2013-02-18
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多