Ссылка: Как создать реверс / URL Django, используя аргументы запроса?
Это в somepage.html
<a href={% query_urls from={{from}} to={{to}} %}> LOL LOSER</a>
Сначала перейдите к somepage
представлениям, а затем нажмите любую кнопку, чтобы перенаправить на move
просмотров.
def move(request):
to = request.GET.get('to', 'None')
ffrom = request.GET.get('from', 'None')
#raise AssertionError(ffrom)
return render_to_response(request, "move.html", {'to': to, 'from': ffrom})
def somepage(request):
to = '../mydir'
ffrom = './heere.py'
return render_to_response(request, "somepage.html", {'to': to, 'from': ffrom})
Вместо того, чтобы получить что-то вроде
http://localhost/web/move?from=./here.py&to=../mydir
Я понимаю это
http://localhost/web/move?from={{from}}&to={{to}}
Эти контекстные переменные вообще не визуализировались, возможно потому, что пользовательский тег (применяемый к представлениям somepage
) принимает все параметры в виде строки. Как заставить его сделать сначала?
Спасибо.
** РЕДАКТИРОВАТЬ ** Маленький вопрос:
Если я хочу достичь этого
url(r"^search/<?P(cbid)\d+>/", 'views.search', name='search')
Я получу Malformed arguments to query_urls tag
, если я добавлю это в шаблон
<a href={% query_url 'search' 12456 from=from to=to %}> MY LINK </a>
Какой общий способ написания моего пользовательского тега позволяет это сделать?
В настоящее время это то, что я делаю ... что работает ...
def render(self, context):
view_name = self.view_name.resolve(context)
kwargs = dict([(smart_str(k, 'ascii'), v.resolve(context))
for k, v in self.kwargs.items()])
cbid = kwargs['cbid']
kwargs = sorted(kwargs.items(), key=lambda x:x[0]) # sorted and generate a list of 2-tuple
# kwargs query set now contains no cbid
kwargs = [ value for index, value in enumerate(kwargs) if value[0] != 'cbid']
#raise AssertionError(urllib.urlencode(kwargs))
return (reverse(view_name, args=[(cbid),], current_app=context.current_app)
+ '?' + urllib.urlencode(kwargs))
Я хочу сделать его более общим, соответствовать любому шаблону, а не только cbid.
<a href={% query_url 'search' cbid=12456 from=from to=to %}> MY LINK </a>
Тупой (и, вероятно, единственный способ) написать что-то вроде этого в шаблоне
{% query_url 'view_func' args=[(cbid, some_text, more_text,)], from=foo to=bar %}
где args воспринимается буквально как список аргументов, как в обычной функции python. Возможно, мы можем eval
сделать это в виде списка вместо буквальной строки.