如何知道我的 url 语法是否是有效的 django url 语法?

问题描述 投票:0回答:1

我动态生成 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
    )
python django django-urls
1个回答
0
投票

我动态生成我的 URL。

很明显,错误出现在生成路径的代码中。您可以尝试删除出现故障的路径,但这没有多大意义。首先,通常很难找出哪些路径出现故障,但即使我们设法找到这些路径,唯一的选择就是丢弃它们。但路径后面的视图不再起作用。

您可以尝试以下模式:

from django.urls.resolvers import RoutePattern

try:
    RoutePattern('/my/<:faulty>/path')
except:
    # problem, remove
    pass

但它看起来很糟糕,方法应该有生成valid元素的契约,而不是尝试以某种方式修复它。

© www.soinside.com 2019 - 2024. All rights reserved.