Django:如何在基于 class 的视图中实现 request.session
Django: How to implement request.session in a class based view
我很难理解 Django 中基于 class 的视图。这时候我尝试在一个ListView
中实现一个request.session
。我尝试将以下基于函数的代码从 MdM Django Tutorial 中实现到 ListView。
def index(request):
...
# Number of visits to this view, as counted in the session variable.
num_visits = request.session.get('num_visits', 0)
request.session['num_visits'] = num_visits + 1
context = {
'num_visits': num_visits,
}
return render(request, 'index.html', context=context)
我尝试了以下方法(以及许多其他方法)但无济于事:
class ListPageView(FormMixin, ListView):
template_name = 'property_list.html'
model = Property
form_class = PropertyForm
def get(self, request, *args, **kwargs):
num_visits = request.session.get('num_visits', 0)
request.session['num_visits'] = num_visits + 1
return super().get(request, *args, **kwargs)
# ... some more code here
在我的模板中有:
<p>You have visited this page {{ num_visits }}{% if num_visits == 1 %} time{% else %} times{% endif %}.</p>
但是模板变量始终呈现为空。
感谢您的帮助。非常感谢。
您仍然需要通过覆盖 get_context_data
method [Django-doc]:
将其传递给上下文
class ListPageView(FormMixin, ListView):
template_name = 'property_list.html'
model = Property
form_class = PropertyForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
<b>context['num_visits'] = self.request.session['num_visits']</b>
return context
def get(self, request, *args, **kwargs):
num_visits = request.session.get('num_visits', 0)
request.session['num_visits'] = num_visits + 1
return super().get(request, *args, **kwargs)
我知道这是一个迟到的答案,但我 运行 遇到了同样的问题,我会尽力投入我的两分钱,也许我的答案会帮助像我这样的新手。
您的模板始终可以访问 {{ request }}
变量,因此您可以简单地使用 {{request.session.key}}
而无需定义额外的上下文。
我还看到您对复数使用了 {% if %}
条件,但 Django 有一个很好的过滤器 {{ value|pluralize }}
,它可能更有用。
我很难理解 Django 中基于 class 的视图。这时候我尝试在一个ListView
中实现一个request.session
。我尝试将以下基于函数的代码从 MdM Django Tutorial 中实现到 ListView。
def index(request):
...
# Number of visits to this view, as counted in the session variable.
num_visits = request.session.get('num_visits', 0)
request.session['num_visits'] = num_visits + 1
context = {
'num_visits': num_visits,
}
return render(request, 'index.html', context=context)
我尝试了以下方法(以及许多其他方法)但无济于事:
class ListPageView(FormMixin, ListView):
template_name = 'property_list.html'
model = Property
form_class = PropertyForm
def get(self, request, *args, **kwargs):
num_visits = request.session.get('num_visits', 0)
request.session['num_visits'] = num_visits + 1
return super().get(request, *args, **kwargs)
# ... some more code here
在我的模板中有:
<p>You have visited this page {{ num_visits }}{% if num_visits == 1 %} time{% else %} times{% endif %}.</p>
但是模板变量始终呈现为空。
感谢您的帮助。非常感谢。
您仍然需要通过覆盖 get_context_data
method [Django-doc]:
class ListPageView(FormMixin, ListView):
template_name = 'property_list.html'
model = Property
form_class = PropertyForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
<b>context['num_visits'] = self.request.session['num_visits']</b>
return context
def get(self, request, *args, **kwargs):
num_visits = request.session.get('num_visits', 0)
request.session['num_visits'] = num_visits + 1
return super().get(request, *args, **kwargs)
我知道这是一个迟到的答案,但我 运行 遇到了同样的问题,我会尽力投入我的两分钱,也许我的答案会帮助像我这样的新手。
您的模板始终可以访问 {{ request }}
变量,因此您可以简单地使用 {{request.session.key}}
而无需定义额外的上下文。
我还看到您对复数使用了 {% if %}
条件,但 Django 有一个很好的过滤器 {{ value|pluralize }}
,它可能更有用。