如何将never_cache应用到第三方Django应用的URL?
我正在尝试在 urls.py
文件中使用 @never_cache
这个装饰器。我觉得可以这样使用:
url(r'^about/', never_cache(TemplateView.as_view(template_name="about_us.html"))),
但很多时候我在使用外部应用程序,通常我只需要写 url('', include(shop.urls))
。比如说 django-oscar
这个库。那么在这种情况下,我该怎么把 never_cache
应用到它上面呢?
2 个回答
0
以下内容在Django 1.11中对我有效(继续使用shop.urls
的例子):
uncached_patterns = [
url(urlpattern.regex.pattern, never_cache(urlpattern.callback), name=urlpattern.name) for urlpattern in shop.urls.urlpatterns
]
urlpatterns += [
url('', include(uncached_patterns))
]
1
你可以试试这个来自 django-snippets 的方法:
from django.conf.urls.defaults import url
from django.views.decorators.cache import never_cache
def never_cache_patterns(prefix, *args):
pattern_list = [], tterns,
for t in args:
if isinstance(t, (list, tuple)):
t = url(prefix=prefix, *t)
elif isinstance(t, RegexURLPattern):
t.add_prefix(prefix)
t._callback = never_cache(t.callback)
pattern_list.append(t)
return pattern_list
urlpatterns = never_cache_patterns('',
(r'foo/$', 'myview')
)
看起来没有更简单的方法来实现这个功能。
如果你想把它应用到另一个你无法编辑的应用中的一组网址,你可以试试:
uncached_patterns = never_cache_patterns('',
url(r'^$', include('shop.urls')),
)
urlpatterns = patterns('',
include(uncached_patterns),
# other patterns
# eg. url(r'^myapp/', include('myapp.urls', namespace="myapp")),
# ...
)