【问题标题】:Invalid Syntax error in URLS.py in DJangoDJango 中 URLS.py 中的无效语法错误
【发布时间】: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'..'

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


【解决方案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'..' 可能是编写正则表达式的最佳方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多