我们的一些网址包含 #。这些用于反向查找,同时使用 reverse 和 {% url 模板标签(在内部使用 reverse)。 Django 1.8 曾经不理会它,1.11 现在将它编码为 %23。
有没有可能在某个地方放置一个猴子补丁包装器,并让它在任何地方都可以正常使用?这是我的包装器:
def patch_reverse(func):
def inner(*args, **kwargs):
print "inner reverse"
url = func(*args, **kwargs)
return url.replace("%23", "#")
return inner
from django.urls import base
base.reverse = patch_reverse(base.reverse)
print 语句让我可以看到它是否真的在运行。
我已经尝试将其放入设置、第一个安装的应用程序的 __init__ 以及第一个安装的应用程序的 urls 中。什么都没用。
请您参考如下方法:
当您修补reverse 时,原始函数可能已经导入到django.urls(您通常从中导入它)和django .template.defaulttags({% url %} 标签使用它的地方。尝试在这些模块中修补它:
import django.urls
django.urls.reverse = patch_reverse(django.urls.reverse)
import django.template.defaulttags
django.template.defaulttags = patch_reverse(django.template.defaulttags)
