У меня есть несколько значений, которые я хотел бы передать в фильтр и получить URL-адрес из него.Django - как использовать фильтр templatetags с несколькими аргументами
В моем шаблоне у меня есть:
{% 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 %}
В моем templatetags у меня есть:
@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 - эквивалент '&'.
Прежде всего: это сработает, но я получаю custid = name.id, входящий в add_args(), где я хочу, чтобы custid = 11 заходил. Как передать id как id, а не текст.
Кроме того, есть способ просто отправить массив значений key =>, как в PHP. В PHP я хотел бы построить массив, скажем:
arglist = array('custid' => $nameid, 'sortid' => $sortid);
Тогда я бы передать список аргументов в качестве аргумента в add_args()
и в add_args()
я бы
foreach(arglist as $key => $value)
$argstr .= $key . 'ZZ' . $value . 'QQ'.
Кто-нибудь есть лучший способ делая эту работу?
Примечание: если мне нужно передать все аргументы в виде строки и разделить их на фильтр, я не против. Я просто не знаю, как передать name.id как его значение ...
вещи, подобные идентификатору sort, находятся за пределами объектной модели. Итак, я думаю, они должны быть переданы. И если мне нужно передать аргументы здесь и там, я могу просто передать его фильтру. все, что я пытаюсь сделать, это сделать http://foo.com/some-slugy-stuff-ArgsID22Sort2/. Таким образом, каждая ссылка знает, что загружать, и если вы копируете и вставляете и отправляете друзьям по электронной почте, они могут точно видеть, что вы хотите видеть. Поверьте мне, я знаю, как это сделать Django. Думаю, никто не знает или не удосужился опереться на то, как передать несколько аргументов фильтру. Спасибо за ваш повтор! – un33k
Зачем использовать args для сложных тегов вместо использования именованных URL-адресов? – drozzy
+1 для рекомендации 'get_absolute_url'. Вот хорошее [сообщение в блоге] (http://www.achanceofbrainshowers.com/blog/tech/2010/11/29/djangos_permalink_decorator/) о декораторе 'permalink', чтобы использовать его, и как это может быть очень круто. – hangtwenty