Ответ 1
Передайте строку запроса в шаблоне:
<a href="{% url my_videos %}?filter=others&sort=newest">My Videos</a>
У меня есть функция, которая вызывает другую функцию и передает строку запроса в конец URL-адреса.
Как бы я выполнил следующее -
if my_videos:
return render(request, template, {kwargs}) + "?filter=others&sort=newest"
Примечание. Мне все равно, использую ли я рендер или нет, его использование - просто указать, что я пытаюсь выполнить. Спасибо.
Передайте строку запроса в шаблоне:
<a href="{% url my_videos %}?filter=others&sort=newest">My Videos</a>
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
if my_videos:
return HttpResponseRedirect( reverse('my_videos') + "?filter=others&sort=newest")
Я не уверен, было ли это возможным во время запроса этого вопроса, но если у вас есть данные для построения строки запроса в вашем представлении и передачи ее в качестве контекста, вы можете использовать класс QueryString. После его создания вы можете просто вызвать его urlencode для создания строки.
Пример:
from django.http import QueryDict
def my_view(request, ...):
...
q = QueryDict(mutable=True)
q['filter'] = 'other'
q['sort'] = 'newest'
q.setlist('values', [1, 2, 'c'])
query_string = q.urlencode()
...
query_string
теперь будет иметь значение u'filter=other&sort=newest&values=1&values=2&values=c'
Вот два смарт-шаблона для изменения параметров запроса в шаблоне:
В шаблонах вы можете сделать что-то вроде следующего:
{% url 'url_name' user.id %}
{% url 'url_name'%}?param=value
{% "/app/view/user_id" %}
В первом случае запрос будет выглядеть в форме http://localhost.loc/app/view/user_id "Во втором случае строка запроса должна быть в форме http://localhost.loc/app/view?param=value" В третьем случае это просто, но я рекомендую первый, который зависит от имени сопоставлений url, применяемых в urls.py
Применение этого в представлениях должно выполняться с помощью HttpResponseRedirect
#using url_names
# with standard querystring
return HttpResponseRedirect( reverse('my_url') + "?param=value")
#getting nicer querystrings
return HttpResponseRedirect(reverse('my_url', args=[value]))
# or using relative path
return HttpResponseRedirect( '/relative_path' + "?param=value")
Подсказка: чтобы получить значение строки запроса из любого другого представления
s = request.GET.get('param','')
Перенаправить URL-адрес, который вы хотите использовать HttpResponseRedirect
from django.http import HttpResponseRedirect
[...]
if my_videos:
return HttpResponseRedirect(request.path + "?filter=others&sort=newest")