2013-11-26 2 views
0

Я новичок в Django, и мне сложно решить, какой подход лучше всего подходит для оформления моих шаблонов. До сих пор я разработал свой сайт относительно просто. Я сейчас нахожусь в точке, где у меня есть домашняя страница, на которой три разных якорных тега указывают на один и тот же шаблон, но в конечном итоге будут генерироваться динамически на основе выбранной ссылки.Несколько шаблонов, комплексный вид или творческая модель

Мой вопрос, что является лучшим решением:

Должен ли я построить три отдельные (позволяет называть их путем) шаблонами каждый для уникального URL, который он представляет?

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

Или, есть ли решение, использующее модель для каждой страницы?

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

Спасибо за ваш вклад.

ответ

1

С Джанго вы используете {% extends %} тег шаблона, чтобы наследовать другой шаблон, то вы overide {% block %} вы должны быть конкретными.

ie.

base.html

<html> 
    <head> 
     <js and css etc> 
    </head> 
    <body> 
    <some more html /> 
    {% block content %} 
     <p>generic content that wont be shown if you render specific.html</p> 
    {% endblock %} 
    </body> 
</html> 

тогда в specific.html

{% extends 'base.html' %} 

{% block content %} 
    <p>specific content that will be shown instead</p> 
{% endblock %} 

блоки могут быть небольшими и Не должно быть переопределены, использований, например

<body class="{% block bodyclass %}{% endblock %}"> 

является общим

+0

Мне это хорошо известно. Мой вопрос заключается в том, лучше ли создавать несколько шаблонов (например, расширение базы), где все разметки будут одинаковыми, только содержимое изменится. Я считаю, что я нарушу принцип DRY, если бы я создал 3 шаблона с одинаковой разметкой и только изменение контента. – Justin

+1

О, хорошо, если вы можете сделать шаблон достаточно общим, то его можно использовать повторно. Несколько разных представлений могут отображать один и тот же шаблон с разными контекстами. – krs

+0

Даю вам кредит, потому что я не думал о возможности делать разные взгляды, я думал, что собираюсь использовать один взгляд и дифференцировать возвращение. Множество просмотров с одним шаблоном, безусловно, является ответом. Благодаря! – Justin

1

Вы можете сделать site_base.html со всеми элементами и т.д. в <head> и <script> и с

<!-- HEAD --> 
    {% block content %} 
    <div class='container' id="default_container"> 
     Your default content 
    </div> 
    {% endblock content %} 
<!-- FOOT --> 

Затем в urls.py вы определяете «пути» - Ссылки на ваши взгляды. Если вы desireing простой плоской страницы, которую вы можете поставить TemplateView.as_view(template_name = "page_1.html") нравится:

urlpatterns = patterns('', 
    (r'^$', TemplateView.as_view(template_name='site_base.html')), 
    (r'^page_1/$', TemplateView.as_view(template_name='page_1.html')), 
) 

и в вашем page_1.html:

{% extends 'site_base.html' %} 

{% block content %} 
    <div class='container' id="page_1"> 
    Your Page 1 content that will overwrite `block content` tag from site_base.html 
    </div> 
{% endblock content %} 

Вы можете разместить любые {% block }% тегов, которые вы хотите.
Я иногда использую мое приложение Flat. Он ищет шаблон с именем из URL или возвращает 404.

# urls.py 
from views import flat_render_view 

urlpatterns = patterns('', 
    url(r'^(?P<template_name>\w+)/$', flat_render_view, name='flat_view'), 
) 

# views.py 
from django.http.response import Http404 
from django.template.base import TemplateDoesNotExist 
from django.shortcuts import render 

def flat_render_view(request, **kwargs): 
    try: 
     return render(request, "flat_pages/%s.html" % kwargs['template_name']) 
    except TemplateDoesNotExist: 
     raise Http404 
+0

Это все еще не отвечает мой вопрос. Создать три шаблона с одинаковой разметкой и изменить только жестко закодированное содержимое или создать один шаблон и динамически загружать содержимое в представлениях? – Justin

+0

Это зависит от того, что вам нужно сделать. Журнальные статьи - передавайте содержимое с моделей db в контекст шаблона.Статические страницы для информационного сайта - пишите 'blocks'. Вы будете оптимально DRY, если вы создадите «static_base» и используете его. Я скорее использую множественные частичные части шаблонов и включаю их в свою базу. – McAbra

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