Добавить строку запроса к URL в django - PullRequest
22 голосов
/ 15 августа 2011

У меня есть функция, которая вызывает другую функцию и передает строку запроса в конец URL.

Как мне выполнить следующее -

if my_videos:
    return render(request, template, {kwargs}) + "?filter=others&sort=newest"

Примечание: я делаюне важно, использую я рендер или нет, его использование просто для того, чтобы указать, чего я пытаюсь достичь.Спасибо.

Ответы [ 6 ]

31 голосов
/ 15 августа 2011

Передать строку запроса в шаблоне:

<a href="{% url my_videos %}?filter=others&sort=newest">My Videos</a>
10 голосов
/ 15 августа 2011
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect


if my_videos:
    return HttpResponseRedirect( reverse('my_videos') + "?filter=others&sort=newest")
6 голосов
/ 01 марта 2017

Я не уверен, было ли это возможно во время вопроса, но если у вас есть данные для построения строки запроса в вашем представлении и передачи ее в качестве контекста, вы можете использовать QueryDict класс.После его создания вы можете просто вызвать функцию 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'

3 голосов
/ 15 августа 2011

Вот два умных тега шаблона для изменения параметров строки запроса в шаблоне:

2 голосов
/ 17 июня 2014

В шаблонах вы можете сделать что-то вроде следующего:

{% 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','')
1 голос
/ 15 августа 2011

Перенаправить на URL, который вы хотите, используя HttpResponseRedirect

from django.http import HttpResponseRedirect

[...]

if my_videos:
    return HttpResponseRedirect(request.path + "?filter=others&sort=newest")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...