我在django中有两个CBV
class StudentUpdateView(UpdateView):
model = Student
template_name = "students/students_edit.html"
form_class = StudentUpdateForm
def get_success_url(self):
return u'%s?status_message=Студент успішно збережений ' % reverse('home')
def post(self, request, *arg, **kwargs):
if request.POST.get('cancel_button'):
messages.info(self.request, "Edit canceled")
return HttpResponseRedirect(
u'%s?status_message=Редагування відмінено'
% reverse('home'))
else:
messages.success(self.request, u"Студент змінений")
return super(StudentUpdateView, self).post(
request,*arg, **kwargs)
def get_context_data(self, **kwargs):
context = super(StudentUpdateView, self).get_context_data(**kwargs)
return context
另一个是针对相同型号的CreateView。我想对这两个视图使用相同的模板,模板中有一些部分我希望是动态的。
{%block meta_title%}Редагуватистудента{%endblock meta_title%} {%block title%}Редагуватистудента{%endblock title%}
元标题将元文本和标题带到页面H2文本。我想根据我的观点更改此块中的文本(如果我输入createview,那么文本将更改为某些文本,如果另一个 - 模板更改为另一个文本) 我试过通过ifequal或者如果request.path == url检查它 但代码没有效果。 如何检查在当前时间使用模板的视图并更改此视图的模板中的块文本?
答案 0 :(得分:2)
您应该从视图中向同一模板发送不同的上下文。
假设您有两个使用相同模板的网址(/ test1 /和/ test2 /),与网址关联的不同视图可以将不同的上下文对象发送到同一模板,以便更改内容。
因此,在您的情况下,您可以按如下方式编辑模板 -
{% block meta_title %}{{some_variable}}{% endblock meta_title %}
{% block title %}{{some_other_variable}}{% endblock title %}
在这里,您可以在上下文对象中发送不同的变量值。
例如 -
views.py
from django.views.generic import FormView, TemplateView
from .forms import TestForm
class TestView1(TemplateView):
template_name = 'test2.html'
def get_context_data(self, **kwargs):
context = super(TestView1, self).get_context_data(**kwargs)
context['title'] = 'Bansal'
return context
class TestView2(TemplateView):
template_name = 'test2.html'
def get_context_data(self, **kwargs):
context = super(TestView2, self).get_context_data(**kwargs)
context['title'] = 'Utkarsh'
return context
urls.py
from django.conf.urls import url
from .views import RegisterView, TestView1, TestView2
urlpatterns = [
# url(r'', RegisterView.as_view()),
url(r'^test1$', TestView1.as_view()),
url(r'^test2$', TestView2.as_view()),
]
test2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
{{ title }}
</body>
</html>
请注意,两个模板视图都使用相同的模板 - test2.html,唯一的区别是不同的视图传递了不同的上下文值。
所以当我们打开test1 /我们看到Bansal并且在test2 /我们看到Utkarsh