SORU
4 ŞUBAT 2009, ÇARŞAMBA


Tekrar nasıl "blok" django şablon

Aynı kullanmak istiyorum{% block %}aynı django şablon iki kez. Bu bloğu bir kez daha temel şablon olarak görünmesini istiyorum

# base.html
<html>
    <head>
        <title>{% block title %}My Cool Website{% endblock %}</title>
    </head>
    <body>
        <h1>{% block title %}My Cool Website{% endblock %}</h1>
    </body>
</html>

Ve sonra bunu uzatmak:

# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}

# pictures.html
{% extends 'base.html' %}
{% block title %}My Pictures{% endblock %}

# cats.html
{% extends 'base.html' %}
{% block title %}My Cats{% endblock %}

Django blok sadece bir kez görünmesini istiyor gibi bir durum olsun, karşılık vereceğim

/ TemplateSyntaxError

< . ''adı ile 'başlık' görünür etiketi blok ^güçlü birden çok kez

Hızlı ve kirli bir çözüm blok çoğaltma olurdubaşlıkiçinebaşlık sütununu başlık1 olarakvetitle2:

# blog.html
{% extends 'base.html' %}
{% block title1 %}My Blog{% endblock %}
{% block title2 %}My Blog{% endblock %}

Ama bu DRY ilkesini ihlal eder. Bilmiyorum çünkü miras şablonları bir sürü işim var çok zor olurdu, ve de ister cehenneme gider ;-)

Herhangi bir hile ya da iş çevresinde bu sorun var mı? Nasıl tüm kod çoğaltmadan benim şablon aynı blok tekrarlayabilirsiniz?

CEVAP
22 EYLÜL 2009, Salı


Django şablon makroları eklentisi kullanın:

http://www.djangosnippets.org/snippets/363/ (django < 1.4)

ya

https://gist.github.com/1715202 (django >= 1.4)

Daha sonra

# base.html
{% macro title %}
    {% block title %}My Cool Website{% endblock %}
{% endmacro %}

<html>
    <head>
        <title>{% usemacro title %}</title>
    </head>
    <body>
        <h1>{% usemacro title %}</h1>
    </body>
</html>

ve

# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MrSuicideSheep

    MrSuicideShe

    9 NİSAN 2010
  • Randall P Studios

    Randall P St

    27 AĞUSTOS 2009
  • Sean Murphy

    Sean Murphy

    4 ŞUBAT 2009