代码之家  ›  专栏  ›  技术社区  ›  Chris R

我如何在django中创建一个URL链接,该链接将转到引用视图?

  •  2
  • Chris R  · 技术社区  · 15 年前

    我想能够创建一个反向链接到参考网址,如果参考是一个视图,如果它不是一个视图,一个反向链接到一个默认页面(不要问。。。这是一个奇怪的要求)。

    基本上,如果用户是从同一个django站点上的另一个视图访问该页面的,那么back链接应该是返回到该视图的。

    Javascript不是一个理想的解决方案,尽管如果没有其他方法,我愿意考虑它。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Devin Jeanpierre    15 年前

    使用 django.core.urlresolvers.resolve django.core.urlresolvers.Resolver404 ,否则它将返回一个匹配对象,您可以在必要时进行自省。你可以喂孩子 REFERER 根据需要将环境变量设置为该值,并在必要时使用默认URL替换URL resolve

    :实际上,没有, 显然只适用于URL的路径组件。所以你必须解构 推荐人 标题使用 urlparse 决定 在解析后的URL的路径组件上,确定该URL是否是Django站点的一部分。

    # code not tested, YMMV, etc. 
    
    from urlparse import urlparse
    
    from django.core import urlresolvers
    
    HOME = 'http://my.site.com/'
    
    def generate_back_url(url, default_url=HOME):
        parsed = urlparse(url)
        if parsed.netloc == 'my.site.com':
            try:
                urlresolvers.resolve(parsed.path)
            except urlresolvers.Resolver404:
                back_url = default_url
            else:
                back_url = url
        else:
            back_url = default_url
        return back_url
    
    # ...
    
    def my_view(request):
        # ...
        # truth be told I'm not sure whether the .get() is necessary, sorry.
        back_url = generate_back_url(request.META.get('REFERER', HOME))
        # ...
    
        2
  •  2
  •   Rockallite    13 年前

    django.utils.http.is_safe_url() 相反。

    from django.utils.http import is_safe_url
    
    def my_view(request):
        # ...
        if is_safe_url(url=url, host=request.get_host()):
            back_url = url
        else:
            back_url = default_url