python - Django -- 如何使用带有多个参数的 templatetags 过滤器

标签 python django filter django-templates tags

我有一些值想传递给过滤器并从中获取 URL。

在我的模板中我有:

{% if names %}
  {% for name in names %}
    <a href='{{name|slugify|add_args:"custid=name.id, sortid=2"}}'>{{name}}</a>
    {%if not forloop.last %} | {% endif %}
  {% endfor %}
{% endif %}

在我的模板标签中我有:

@register.filter
def add_args(value, args):
    argz = value.strip() + '-' + 'ARGS'
    arglist = args.split(',')
    for arg in arglist:
        keyval = arg.split('=')
        argz.join(keyval[0] + 'ZZ' + keyval[1])
        argz.join('QQ')

    return argz  

输出 URL 应如下所示:

http://foo.org/john-smith-ARGScustidZZ11QQsortidZZ2

其中 ARGS 是参数的开始,ZZ 是“=”,QQ 是“&”的等价物。

首先:这可行,但我在 add_args() 中得到 custid=name.id,我希望 custid=11 进入。如何将 id 作为 id 而不是文本传递.

此外,有没有一种方法可以像在 PHP 中那样只发送一个键=>值数组。 在 PHP 中,我会构建一个数组,比方说:

arglist = array('custid' => $nameid, 'sortid' => $sortid ); 

然后我会将 arglist 作为参数传递给 add_args(),在 add_args() 中我会这样做

foreach( arglist as $key => $value)
  $argstr .= $key . 'ZZ' . $value . 'QQ'.

有没有人有更好的方法来完成这项工作?

注意:如果我必须将所有参数作为字符串传递并在过滤器中将它们拆分,我不介意。我只是不知道如何将 name.id 作为其值传递...

最佳答案

这种“智能”逻辑不应该出现在模板中。 在您的 View 中构建您的 end-of-urls,然后将它们传递给模板:

def the_view(request):
  url_stuff = "custid=%s, sortid, ...." % (name.id, 2 ...)

  return render_to_response('template.html',
    {'url_stuff':url_stuff,},
    context_instance = RequestContext(request))

在 template.html 中:

 ....

    <a href='{{url_stuff}}'>{{name}}</a>

 ....

如果您需要一大堆对象的 url,请考虑使用 get_absolute_url在模型上。

关于python - Django -- 如何使用带有多个参数的 templatetags 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896166/

相关文章:

Django 查询集 : fetch objects that contain at least one of the elements in set

python - 如何在 Django 管理仪表板中构建链式过滤器

python - 在python中将2位数字拆分为1 0's and 1' s

Django-如何将模型字段重置为其默认值?

python - 如何比较两个不同大小的numpy数组并返回具有共同元素的索引列?

python - 如果引发异常,测试会失败吗?

PHP 按类别过滤搜索结果

list - 空列表问题的头函数

python - “模块”对象不可调用。执行 AI 文件时出错

python - 在notepad++中执行python脚本时出现问题