【问题标题】:Append a querystring to URL in django在 django 中将查询字符串附加到 URL
【发布时间】:2011-10-27 00:26:42
【问题描述】:

我有一个函数调用另一个函数并将查询字符串传递到 URL 的末尾。

我将如何完成以下任务 --

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

注意:我不在乎我是否使用渲染,它的用途只是指出我想要完成的事情。谢谢。

【问题讨论】:

  • 查看this answer 以获取用于呈现查询字符串的简单自定义模板标签。

标签: django


【解决方案1】:

在模板中传递查询字符串:

<a href="{% url 'my_videos' %}?filter=others&sort=newest">My Videos</a>

【讨论】:

  • 结尾不是这样的斜杠吗:example.com/videos/?filter=other&amp;sort=newest
【解决方案2】:

我不确定在提出这个问题时这是否可行,但如果您有可用数据在视图中构建查询字符串并将其作为上下文传递,则可以使用 @987654321 @ 班级。构造好之后,调用它的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&amp;sort=newest&amp;values=1&amp;values=2&amp;values=c'

【讨论】:

    【解决方案3】:

    这里有两个智能模板标签,用于修改模板中的查询字符串参数:

    【讨论】:

      【解决方案4】:

      在模板中,您可以执行以下操作:

      {% 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”的形式 在第三个中,它很简单,但是我推荐第一个,它取决于 urls.py 中应用的 url 映射的名称

      在视图中应用这个,应该使用 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 参数"
      • 第三种形式应该是什么意思?那里的模板标签是什么?
      • 第三种形式主要用于视图,GET 本身是字典(Java 中的 HashMap)对象,而 get 是根据传递的键 'param' 从字典,第二个参数是默认值,以防在字典中找不到键。您还可以选择像这样 request.GET["param"] 调用它而不指定任何默认值
      • @HarryLee 是的,你是对的,但是我试图在我的答案中给出所有可能的方法来通过使用查询字符串或 url 参数来获取值(你可以说它们都具有相同的语义但是它不同的语法或定义)..谢谢你的评论
      【解决方案5】:
      from django.core.urlresolvers import reverse
      from django.http import HttpResponseRedirect
      
      
      if my_videos:
          return HttpResponseRedirect( reverse('my_videos') + "?filter=others&sort=newest")
      

      【讨论】:

        【解决方案6】:

        使用HttpResponseRedirect重定向到您想要的网址

        from django.http import HttpResponseRedirect
        
        [...]
        
        if my_videos:
            return HttpResponseRedirect(request.path + "?filter=others&sort=newest")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-12
          • 2013-07-20
          相关资源
          最近更新 更多