【问题标题】:Django bug with a tag带有标签的 Django 错误
【发布时间】:2009-12-16 00:34:15
【问题描述】:

我的代码

{% if GET['search'] % }
            {% block count codes|length as counter %}

以下 if 子句作为 Django 标记是否有效?

{% if GET['search'] % }

以下代码给了我一个错误,即 block 只接受一个参数。 代码有什么问题?

{% block count codes|length as counter %}

【问题讨论】:

    标签: django tags


    【解决方案1】:

    Django 不是 PHP。

    您正在尝试在模板标签内使用模板过滤器。您可以使用标签或过滤器,但不能同时使用两者。

    就此而言,由于block 标记仅采用块的标签,因此我不确定您编写的模板代码应该做什么。另外,您确定GET['search'] 是模板标签中的有效语法吗?

    我对您的视图和模板要求有所猜测,但这是我将如何代替您处理这个问题。根据您的具体情况,您必须自己填补许多空白。

    views.py:

    from django.shortcuts import render_to_response
    
    def my_view(request):
        request_was_search = False
        codes = []
    
        if request.GET.has_key('search'):
            request_was_search = True
            codes = some_function_you_define_to_get_codes()
    
        return render_to_response('foo.html',
                                  {'codes':codes,
                                   'request_was_search':request_was_search})
    

    在模板中:

    {% block count %}
        {% if request_was_search %}
            // do whatever you want here
            <p>There were {{ codes|length }} codes submitted.</p>
            // end example
        {% endif %}
    {% endblock %}
    

    【讨论】:

    • 说不能在标签中使用过滤器语法是不正确的。这完全取决于标签的编写方式——如果标签调用相关的解析函数,您绝对可以评估标签内的过滤器。
    【解决方案2】:

    这是不正确的语法。试试这个:

    {% if GET.search % }
    

    这假设您在传递给您的模板的上下文中有 GET。

    【讨论】:

    • +1 经验法则,您永远不会在模板中使用字典语法。
    • @Chase:不幸的是,我不相信这些被称为“模板设计师”的人的存在。这意味着模板要么由设计师完成……不,不会发生,要么是程序员……是的,这就是我附近发生的事情。我认为他们真的需要在这里审视现实,并选择 Jinja2 或非常接近它的东西(它也更快)。
    【解决方案3】:

    先定义块,再在里面添加代码

    {% block header %}
     <h1>My Site</h1>
    {% endblock header %}
    

    【讨论】:

      【解决方案4】:

      查看代码的第一行: {% if GET['搜索'] % } 最后两个字符 % 和 } 之间的额外空格是问题所在。删除空格,使 %} 靠得很近。错误('block' 标签只接受一个参数)会消失。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 2020-01-27
        • 1970-01-01
        • 2013-07-13
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多