2015-12-08 4 views
0

В моем приложении я создал основной шаблон, все остальные шаблоны являются расширением для него. Основной шаблон включает только статические данные.Отображение предупреждения в основном шаблоне

Цель: Я хочу предупреждение - маленький малиновый бар наверху - будет отображаться на всех страниц, обслуживаемых приложением.

Текущее решение - это просто написать его в необработанном 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 не упоминается нигде, кроме как в самих шаблонах.

Для предупреждения динамических и настраиваемым от Джанго-администратора, я планирую:

  • Создание модели для нее:
    • Имеет смысл, так как тревога может иметь некоторые свойства за пределами базы ' message content '
  • Как-то спроектируйте и напишите представление, которое заполнило бы основной шаблон динамическим контентом.

Вопрос: Как реорганизовать мнения для достижения цели - сделать основной шаблон динамическим - в то время как нарушение современных взглядов как можно меньше?

ответ

1

Мои предложения состоят в том, чтобы создать модель для хранения вашего предупреждения. Создайте тег включения (отметьте here). Таким образом вы можете добавить этот тег к любому шаблону, который вы хотите (возможно, base.html создать блок предупреждения и использовать этот тег внутри этого блока). Это гарантирует, что при минимальном рефакторе вашего кода вы получите нужную вам функцию, следуя лучшей практике. Надеюсь, что это помогает .. :)

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> 

Надеюсь, это поможет.

+0

Спасибо за ответ, однако, предупреждение должно быть не только в exam.html, а в person.html, module.html и т. Д. - ** все ** страницы должны иметь его. – RebelWithoutAPulse

+0

Создайте собственный шаблонный тег, предложенный Таруном. – rayy

Смежные вопросы