DJango 中 URLS.py 中的无效语法错误
Posted
技术标签:
【中文标题】DJango 中 URLS.py 中的无效语法错误【英文标题】:Invalid Syntax error in URLS.py in DJango 【发布时间】:2018-11-04 04:42:14 【问题描述】:在我的 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)
]
【问题讨论】:
应该是r'..'
而不是re'..'
。
【参考方案1】:
您定义了一个带有 re'..'
前缀的字符串。但是 Python 没有 re'..'
前缀。
它有一个r'..'
前缀,这不是意味着“正则表达式”,而是“原始”。它确实 not 意味着你构造了一个正则表达式,但更重要的是,如果你写例如 r'foo\nbar'
,你确实 not 写了一个 new line 字符('\n'
),但是你写一个反斜杠r'\'
(或者'\\'
对于一个常规字符串)后跟一个'n'
字符。这是必要的,因为如果你构造一个正则表达式,反斜杠应该仍然是单个字符。
因此,您可以将其重写为:
urlpatterns = [
# r instead of re
re_path(r'^details/(?P\d+)/$', views.details),
path('', views.index)
]
Python 也有 f'..'
字符串(可以包含随后被格式化的变量)和 b'..'
字符串(用于二进制字符串),但在 urlpatterns
的情况下这些并不重要。
因此,您本身根本不需要使用r'..'
前缀。但在这种情况下,您必须确保自己避开反斜杠。这使得书写和阅读变得更加困难。因此r'..'
可能是编写正则表达式的最佳方式。
【讨论】:
以上是关于DJango 中 URLS.py 中的无效语法错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥我得到一个无效语法的错误(urls.py,第 34 行)
我是 Django 的初学者,在 urls.py 中遇到语法错误