【问题标题】:Conditional reverse name in Django template URL tagDjango模板URL标签中的条件反向名称
【发布时间】:2013-04-21 10:00:29
【问题描述】:

是否可以将包含反向名称的参数传递给 Django 模板 URL 标记

例如:

note: In this exampleconditional_URLis not a reverse name.

urls.py:

urlpatterns = patterns('views',
    url(r'^iframeViewURL/$', 'iframeView', name='iframeView'),
    url(r'^url_a/', 'view_a', name='view_a'),
    url(r'^url_b/', 'view_b', name='view_b'),
)

view.py:

def iframeView(**kwargs):
    kw = kwargs
    if kw['condition']:
        conditional_url = 'view_a'  # name of the URL pattern
    else:
        conditional_url = 'view_b'  # name of the URL pattern
    return render_to_response('iframe.html', {'conditional_URL': conditional_url},
                              context_instance=RequestContext(request, {}))

def view_a(*args):
    pass

def view_b(*args):
    pass

iframe.html:

<iframe src="{% url conditional_URL *args %}">
</iframe>

我尝试了这个,但它不起作用,因为 conditional_URL 不是任何 url 模式的名称。

【问题讨论】:

    标签: django django-templates url-pattern


    【解决方案1】:

    如果您将{% load url from future %} 添加到您的模板标签,则可以从 Django 1.3 开始:

    {% load url from future %}
    <iframe src="{% url conditional_URL arg1 arg2 %}">
    </iframe>
    

    在 Django 1.5 中不再需要添加 {% load url from future %}

    有关详细信息,请参阅Django Documentation for the url templatetag 中的“转发兼容性”

    【讨论】:

      【解决方案2】:

      与其将 url 模式的名称传递给模板,将更容易解析并将实际 url 传递给模板。

      类似:

      def iframeView(**kwargs):
          kw = kwargs
          if kw['condition']:
              conditional_url = 'name_a'  # name of the URL pattern
          else:
              conditional_url = 'name_b'  # name of the URL pattern
      
          return render_to_response('iframe.html', 
                                {'conditional_URL': reverse(conditional_url)},
                                    context_instance=RequestContext(request, {}))
      

      然后在模板中

      <iframe src="{{conditional_URL}}"> </iframe>
      

      【讨论】:

      • 好吧,看起来很简单,但是上面例子中 {% url %} 中的 *args 怎么样?
      • 一个太多)在return语句中,这个conditional_url_actual = 是语法错误。
      猜你喜欢
      • 2012-01-04
      • 2013-04-23
      • 2010-12-19
      • 2021-11-10
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2011-01-12
      • 2010-11-08
      相关资源
      最近更新 更多