lam*_*ter 5 django django-views
有没有办法在模板渲染之前访问将在views.py 中的 generic.DetailView 中呈现的模型实例?就像这里的假设函数:
class MyModelDetailView(LoginRequiredMixin, generic.DetailView):
model = MyModel
template_name_suffix = '_details'
def do_some_initial_stuff(model_instance):
# do stuff to model_instace,
# like assigning fields, creating context variables based on existing fields, etc.
Run Code Online (Sandbox Code Playgroud)
最终,我希望用户单击一个模板中特定模型实例的按钮,然后定向到此 generic.DetailView 模板,其中模型显示其一些字段值已更改以及其他一些内容(例如模型可能有一个字段确认该用户单击了上一个模板中的按钮)。有关最有效方法的建议将不胜感激。谢谢 :)
如果您只想在上一个视图中单击按钮时才进行某些更改,那么您可以使用 Django会话。将所需的值添加到会话字典中。
request.session['button_clicked'] = True
Run Code Online (Sandbox Code Playgroud)
要在视图的当前上下文中进行更改,可以通过重写 get_context_data() 来完成。
喜欢:
class MyModelDetailView(LoginRequiredMixin, generic.DetailView):
model = MyModel
template_name_suffix = '_details'
def get_context_data(self):
context = super(MyModelDetailView, self).get_context_data()
# Object is accessible through self.object or self.get_object()
if request.session.pop('button_clicked', False):
myobject = self.object
# The alteration you make on myobject wont be saved until you save it using myobject.save()
# Alter the object using myobject and alter the context varible like this:
context['object'] = myobject
context['myvar'] = "My Variable"
# Then return
return context
Run Code Online (Sandbox Code Playgroud)
有关 Django 会话的更多信息:https://docs.djangoproject.com/en/1.11/topics/http/sessions/
| 归档时间: |
|
| 查看次数: |
4778 次 |
| 最近记录: |