Skip to main content
 首页 » 编程设计

python之是否有可能猴子修补 Django 的反向

2025年01月19日34wuhuacong

我们的一些网址包含 #。这些用于反向查找,同时使用 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)