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 中遇到语法错误

Django 在导入 urls.py 时出现语法错误

django中的语法错误

urls.py 中的 Django 时区逻辑和通用视图引发错误,但它是视图、字段还是我?

Django绑定表单无效,但未引发ValidationError