我动态生成 URL,我想知道是否有办法检查语法是否有效。因为我将从 Django 管理面板创建 URL,如果 Django 的语法不正确,co
de will crash. For example, if I make a mistake and create a URL like this:
test/<:custom_pk>/`,应用程序将崩溃,并且我将无法修改它由于崩溃而从管理面板中退出。
错误是: 文件“usr/local/lib/python3.12/site-packages/django/urls/resolvers.py”,第307行,在init中 self.converters = _route_to_regex(str(route), is_endpoint)[1]
文件“usr/local/lib/python3.12/site-packages/django/urls/resolvers.py”,第277行,在_route_to_regex中 引发配置不当( django.core.Exceptions.ImproperlyConfigured:URL 路由“test/<:custom_id>”使用参数“<:custom_id>”,该参数不是有效的 Python 标识符。
我尝试向我的 urlpatterns 发送一个语法不正确的 url,但我除外此错误: 文件“usr/local/lib/python3.12/site-packages/django/urls/resolvers.py”,第307行,在init中 self.converters = _route_to_regex(str(route), is_endpoint)[1]
文件“usr/local/lib/python3.12/site-packages/django/urls/resolvers.py”,第277行,在_route_to_regex中 引发配置不当( django.core.Exceptions.ImproperlyConfigured:URL 路由“test/<:custom_id>”使用参数“<:custom_id>”,该参数不是有效的 Python 标识符。
这里有我的 urls.py 中的代码片段:
def get_view_class(screen):
if screen.view_type in [view.value for view in detail_views]:
return view_types[screen.view_type].as_view(
pk_url_kwarg=screen.pk_url_kwarg,
model=apps.get_model(app_label="database", model_name=screen.model),
html_template=screen.html_template,
layout=screen.layout,
url=screen.url,
)
elif screen.view_type in [view.value for view in list_views]:
return view_types[screen.view_type].as_view(
model=apps.get_model(app_label="database", model_name=screen.model),
html_template=screen.html_template,
layout=screen.layout,
)
else:
return view_types[screen.view_type].as_view(
html_template=screen.html_template, layout=screen.layout, url=screen.url
)
我动态生成我的 URL。
很明显,错误出现在生成路径的代码中。您可以尝试删除出现故障的路径,但这没有多大意义。首先,通常很难找出哪些路径出现故障,但即使我们设法找到这些路径,唯一的选择就是丢弃它们。但路径后面的视图不再起作用。
您可以尝试以下模式:
from django.urls.resolvers import RoutePattern
try:
RoutePattern('/my/<:faulty>/path')
except:
# problem, remove
pass
但它看起来很糟糕,方法应该有生成valid元素的契约,而不是尝试以某种方式修复它。