你如何将never_cache应用于第三方Django app的网址?

时间:2014-07-31 09:09:11

标签: python django

我试图在@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吗?

2 个答案:

答案 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))
]