在我的应用程序中,我设置了一个主模板,所有其他模板都是它的扩展。主模板仅包含静态数据。
目标:我想要一个提醒 - 顶部的小深红色条 - 显示在应用提供的所有页面上。
当前解决方案是在主模板中以原始HTML编写它。
我的观点全部设置如下:
urls.py
:
url(r'^exam/(?P<exam_id>[0-9]+)/$', views.exam, name='exam'),
url(r'^person/(?P<person_id>[0-9]+)/$', views.person, name='person'),
...
views.py
:
def exam(request, exam_id):
exam = get_object_or_404(Exam, pk=exam_id)
return render(request, 'exam.html', {'exam': exam})
def person(request, person_id):
...
即。所有都非常原始,除了模板本身之外,其他地方都没有提到main_template。
要从django-admin制作动态和可配置的警报,我打算:
问题: 如何重构视图以达到目标 - 使主模板动态化 - 同时尽可能少地打破当前视图?
答案 0 :(得分:1)
我的建议是创建一个存储警报的模型。创建包含标记(选中here)。通过这种方式,您可以将此标记添加到您想要的任何模板中(可能base.html创建一个警报块并在该块内使用此标记)。这将确保只需最少的代码重构,您就可以获得所需的功能,并遵循最佳实践。希望这有助于.. :))
答案 1 :(得分:1)
我认为您希望在考试页面上发出一个小警报。(exams.html)
创建一个简单的模型,
class Alert(models.Model):
message = models.CharField(max_length=255, blank=False, null=False)
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
get_latest_by = "date_added"
在您当前的views.py中,
def exam(request, exam_id):
exam = get_object_or_404(Exam, pk=exam_id)
alert = Alert.objects.latest() # Get latest alert message
# Pass alert object along with other variables.
return render(request, 'exam.html', {'exam': exam, 'alert': alert})
在您的exams.html模板中
<div class='alert'>
<p>{{ alert.message }}</p>
</div>
希望这有帮助。