DJango中URLS.py中的语法错误无效

时间:2018-05-24 20:57:26

标签: django python-3.x python-3.6 django-urls django-2.0

在我的urls.py中收到以下错误

Django/Projects/first_project/simple_app/urls.py", line 7
    re_path(re'^details/(?P<id>\d+)/$', views.details),
                                     ^
SyntaxError: invalid syntax

urls.py如下:

from django.contrib import admin
from django.urls import path, re_path, include
from . import views

urlpatterns = [

   re_path(re'^details/(?P<id>\d+)/$', views.details),
   path('', views.index)

]

1 个答案:

答案 0 :(得分:2)

您定义了一个带有re'..'前缀的字符串。但是Python没有re'..'前缀。

它有一个r'..'前缀,而这意味着&#34;正则表达式&#34;,但是&#34; raw &#34 ;。它意味着你构造一个正则表达式,但更多的是,如果你编写例如r'foo\nbar',你做写一个新行字符('\n'),但您为一个常规字符串写了一个反斜杠r'\'(或'\\')后跟一个'n'字符。这是必要的,因为如果你构造一个正则表达式,反斜杠应该仍然是单独的字符。

您可以将其重写为:

urlpatterns = [
    # r instead of re
    re_path(r'^details/(?P\d+)/$', views.details),
    path('', views.index)
]

Python还有f'..'个字符串(可以包含随后被格式化的变量)和b'..'个字符串(用于二进制字符串),但在{{1}的情况下这些并不重要}。

因此,您本身根本不需要使用urlpatterns前缀。但在这种情况下,你必须确保自己逃避反斜杠。这使得写入和阅读更加困难。因此r'..'可能是编写正则表达式的最佳方法。