【问题标题】:regex in django 2.0 re_pathdjango 2.0 re_path 中的正则表达式
【发布时间】:2018-09-03 14:56:16
【问题描述】:

我对 python 和 Django 还很陌生,所以如果这个问题看起来太简单了,请原谅。

我一直在尝试在 CreateView 中使用它,但它不起作用:

re_path(r'^<str:pk>/$', indexView.as_view(), name='index'),

谁能告诉我为什么,以及如何解决这个问题?

【问题讨论】:

    标签: python regex django django-views django-urls


    【解决方案1】:

    您做错了,您使用的是需要正则表达式的re_path,在这种情况下您应该在这里使用path。而且你应该使用slug类型而不是str

    path('<slug:pk>/', indexView.as_view() ,name = 'index'),
    

    但如果你还想使用re_path你必须使用正则表达式。

    re_path(r'^(?P<slug>\w+)/$', indexView.as_view() ,name = 'index'),
    

    您可以关注django docs here

    【讨论】:

    • 你能解释一下这是什么意思吗,(?P\w+)
    • 这意味着传递的任何字符串都将存储在变量slug中,可以在编写视图时访问。
    • 那行不通,这行得通,'(?P\w+)' ...不,我的意思是那是怎么写的,我怎么能理解这样的东西并写出来我自己,没有记住它
    • 因为您指的是使用变量pk 也可以。但是如果你给slug,那么你需要使用slug变量来引用。它可以是任何东西。就像给变量命名一样。
    • 即使使用?P&lt;pk&gt;\w+) 也很好。
    【解决方案2】:

    您正在混淆正则表达式 (re_path()) 和转换器 (path()) 语法。假设你的 pk 是一个整数,你应该使用:

    path('<int:pk>/', indexView.as_view(), name='index'),
    

    re_path(r'^(?P<pk>[0-9]+)/$', indexView.as_view(), name='index'),
    

    【讨论】:

      猜你喜欢
      • 2019-12-26
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 2015-01-30
      • 2012-07-22
      • 2018-07-15
      相关资源
      最近更新 更多