在主模板中显示警报

时间:2015-12-08 07:11:41

标签: django django-views

在我的应用程序中,我设置了一个主模板,所有其他模板都是它的扩展。主模板仅包含静态数据。

目标:我想要一个提醒 - 顶部的小深红色条 - 显示在应用提供的所有页面上。

当前解决方案是在主模板中以原始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制作动态和可配置的警报,我打算:

  • 为它创建一个模型:
    • 有道理,因为警报可能具有超出基础消息内容的某些属性。
  • 以某种方式设计并编写一个视图,用动态内容填充主模板。

问题: 如何重构视图以达到目标 - 使主模板动态化 - 同时尽可能少地打破当前视图?

2 个答案:

答案 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>

希望这有帮助。