我试图在@never_cache
中使用urls.py
装饰器。我认为可以使用
url(r'^about/', never_cache(TemplateView.as_view(template_name="about_us.html"))),
但很多时候我使用的是外部应用,我所做的只是url('', include(shop.urls))
一个例子是django-oscar
。现在我在这种情况下应用never_cache吗?
答案 0 :(得分: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")),
# ...
)
答案 1 :(得分: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))
]