gpt4 book ai didi

python - 当 Django 中加载所有 url 时发出信号

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:10 27 4
gpt4 key购买 nike

我想对 django 的所有 url 模式施展魔法:

如果他们没有名字,那么我想给他们一个自动名称。

不幸的是,django 似乎懒惰地加载 url 模式。

实现这个 magic-add-name-method 很容易,不是这个问题的一部分。

问题:在哪里调用这个方法?我需要在加载所有网址之后和处理第一个请求之前调用此方法。

代码应该适用于 Django 1.9 和 Django 1.10。

背景

Django 不推荐使用这样的导入字符串( Deprecate the ability to reverse by dotted path)

reverse('myapp.views.my_view')

我有一个庞大的遗留代码库,而且我不喜欢输入和维护冗余字符。

我希望所有没有名称的 url 都有其相应导入字符串的名称。

urls.py 中的示例:

url(r'^.../.../(?P<pk>[^/]+)/$', views.my_view))

我想自动将此网址的名称设置为“myapp.views.my_view”。

最佳答案

事后我不会使用信号来更改创建的 url,而是为 django.conf.urls.url 编写一个替换包装器:

def url(*args, **kwargs):
if 'name' not in kwargs:
kwargs['name'] = modulename(args[1]) # Returns something like 'polls.indexview'

return django.conf.urls.url(*args, **kwargs)

然后你就可以使用它

# from django.conf.urls import url  # Removed to enable auto-naming
from autonameroutes.urls import url

from . import views

app_name = 'polls'
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
...
]

逻辑应该与更改系统中所有路由时的逻辑基本相同,但是当您想要使用它时您将拥有更多控制权,并且对于稍后维护代码的开发人员来说,更改将更加明显。

关于python - 当 Django 中加载所有 url 时发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39770214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com