un3*_*33k 2 python tags django filter django-templates
我有一些值,我想传递给过滤器,并从中获取一个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 %}
Run Code Online (Sandbox Code Playgroud)
在我的模板标签中,我有:
@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
Run Code Online (Sandbox Code Playgroud)
输出URL应如下所示:
http://foo.org/john-smith-ARGScustidZZ11QQsortidZZ2
Run Code Online (Sandbox Code Playgroud)
如果ARGS是参数的开头,则ZZ为'=',QQ为'&'等价物.
首先:这会有效,但我得到了add_args()中的custid = name.id,我希望custid = 11进来.如何将id作为id传入而不是文本.
另外,有没有办法像PHP一样发送key => value数组.在PHP中我会构建一个数组,让我们说:
arglist = array('custid' => $nameid, 'sortid' => $sortid );
Run Code Online (Sandbox Code Playgroud)
然后我会将arglist作为参数传递给我,add_args()
并且add_args()
我会这样做
foreach( arglist as $key => $value)
$argstr .= $key . 'ZZ' . $value . 'QQ'.
Run Code Online (Sandbox Code Playgroud)
有没有人有更好的方法来完成这项工作?
注意:如果我必须将所有参数作为字符串传递并在过滤器中将它们拆分,我不介意.我只是不知道如何传递name.id作为其价值......
这种"智能"的东西逻辑不应该在模板中.在您的视图中构建您的URL结尾,然后将它们传递给模板:
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))
Run Code Online (Sandbox Code Playgroud)
在template.html中:
....
<a href='{{url_stuff}}'>{{name}}</a>
....
Run Code Online (Sandbox Code Playgroud)
如果您需要一大堆对象的URL,请考虑在模型上使用get_absolute_url.