【问题标题】:Django: Accessing HttpRequest in Class Based Generic View ListViewDjango:在基于类的通用视图 ListView 中访问 HttpRequest
【发布时间】:2014-10-12 11:05:45
【问题描述】:

我将通过在我的views.py 中对ListView 进行子类化来实现一个基于自定义类的通用视图。我的问题是如何能够访问我的子类中的请求(HttpRequest 对象)参数?我所涉及的 HttpRequest 对象是 views.py 中所有函数的默认请求参数。示例:

def search(request):

为了更清楚,这是我迄今为止尝试过的:

**views.py

class CustomListView(ListView):
    temp = ""

    def get(self, request, *args, **kwargs):
        self.temp = request.GET.get('temp')
        return super(CustomListView, self).get(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(CustomListView, self).get_context_data(**kwargs)
        context['temp'] = self.temp
        return context

**urls.py

url(r'^temp/$, CustomListView.as_view(queryset=Document.objects.all()[:1],template_name="temp.html")),

**temp.html

{% extends 'base.html' %}
{% block content %}
<h2>{{ temp }}
{% endblock %}

但是当我运行服务器并访问 /temp/ (temp.html) 时,我看到的只是“无”。所以意思是,'temp' 是 "" 或根本没有创建'temp'。

非常感谢任何想法。谢谢!

【问题讨论】:

  • 一般情况下,您可以在尚未通过请求的 CBV 方法中使用self.request。但是,您正尝试从查询字符串 (request.GET.get('temp')) 中设置 temp,所以您使用的是什么 URL。例如example.com/temp/?temp=whatever??
  • 感谢史蒂文。所以只是为了澄清你在说什么,我可以在我的 get_context_data 覆盖函数上执行 context['temp'] = self.request 吗?再次,谢谢!
  • 你可以在你的get_context_data方法中有context['temp'] = self.request.GET.get('temp'),然后完全删除你的get覆盖方法。
  • 为什么不在模板中使用{{ request.GET.temp }}
  • 你不应该重写getpost方法,除非你100%确定你在做什么。 CBV 有一堆方法可以满足各种需求,如果其他方法都失败了,请先尝试修改dispatch

标签: python django django-class-based-views


【解决方案1】:

通常,您可以在尚未传递请求的 CBV 方法中使用 self.request。

所以你可以使用

    context['temp'] = self.request.GET.get('temp') 

在您的 get_context_data 方法中,然后完全删除您的 get 覆盖方法。

【讨论】:

  • 史蒂文,还有一个问题。虽然这完全不同......我可以覆盖 urls.py 条目中查询集的内容吗?
  • @jaysonpryde:可能值得再问一个问题。不确定我是否理解您的要求,但您可以在 CustomListView 类上设置 queryset 属性,或者改写 get_queryset 方法,并去掉 urls.py 中的查询集。见docs.djangoproject.com/en/1.6/ref/class-based-views/…
  • 他在问如何在 queryset 类参数中使用 self.request.GE.get('temp')。我也有同样的问题
猜你喜欢
  • 1970-01-01
  • 2011-08-14
  • 2011-10-31
  • 2011-09-19
  • 2012-04-27
  • 2018-02-20
  • 2013-09-23
  • 2021-06-28
  • 2012-12-31
相关资源
最近更新 更多