2009-05-21 13 views
25

İkinci kez daha fazla ayrıntı soran o projede tüm uygulamalar arasında paylaşılan bir proje var ... NasılDjango - Geniş templatetags

ben ortak etiketine sahip bir proje geniş templagetags dizini olmasını istiyorum Tüm Uygulamalar tarafından kullanıldığında, gerektiğinde her uygulamanın kendi etiketleri olabilir.

Let

ı olduğunu düşünelim:

proj1/app1 
proj1/app1/templatetags/app1_tags.py 

proj1/app2 
proj1/app2/templatetags/app2_tags.py 

proj1/templatetags/proj1_tags.py 

proj1/templates/app1/base.html 
proj1/templates/app1/index.html 
proj1/templates/app2/base.html 
proj1/templates/app2/index.html 

Nerede:

proj1/templates/app1/base.html 
----------- 
{% load proj1_tags %} 
{% load app1_tags %} 

proj1/templates/app1/index.html 
----------- 
{% extends "base.html" %} 

proj1/templates/app2/base.html 
----------- 
{% load proj2_tags %} 
{% load app2_tags %} 

proj1/templates/app2/index.html 
----------- 
{% extends "base.html" %} 

misiniz bu iş? Benim için çalışmadı. Yüklenecek proj1_tags bulunamıyor. şöyle

cevap

36

bunu yapmak için sağ yolu olup olmadığını bilmiyorum, ama benim Django apps, hep bir lib "app" ortak şablon etiketlerini yerleştirin:

proj/ 
    __init__.py 
    lib/ 
     __init__.py 
     templatetags/ 
      __init__.py 
      common_tags.py 

Yalnızca lib uygulamasını numaralı listeye settings.py numaralı listeye eklediğinizden emin olun.

+2

Genellikle projeye ardından uygulama adlandırın. –

+3

'common' veya 'commons' da iyi bir isim olabilir. –

+0

Nasıl html dosyaları olarak adlandırmaktan daha iyidir? Sadece '{% common_tags%} yüklüyor? – andi

3

Django INSTALLED_APPS her bir uygulama için genel templatetags kaydeder (ve çözüm çalışmıyor bu yüzden: proje Django tarafından anlaşılan gibi bir uygulama değildir) — onlar (bütün şablonlar mevcuttur düzgün kaydedildi sağlayarak).

Genellikle çeşitli işlevleri (sitenin başlangıç ​​sayfası gibi) işleyen ve orada herhangi bir uygulama ile ilgili olmayan şablon etiketlerini koyan bir uygulamaya sahibim, ancak bu tamamen kozmetiktir.

0

Django, App tarafından çalışır. INSTALLED_APPS ayarında başvururlar.

Farklı bir uygulama ile ilgili her şeyi bölmenizi öneririm. Şablon etiketleriniz için 'common_tags' adlı bir uygulama oluşturabilirsiniz. Sonra kurulum INSTALLED_APPS ayarları kullanmak için ve bunu gibi herhangi şablonlardan sizin ortak etiketleri yüklemek mümkün olacak: Diğerleri de belirtildiği gibi

Django 1.9 olduğundan, ek common uygulaması oluşturmak için artık gerekli değildir
{% load XXXX %} 
9

. Yapmanız gereken tek şey, templatetags dizininize settings.py dizininin OPTION['libraries'] dict dizinine bir yol eklemektir.

Bundan sonra, bu etiketler tüm projeniz boyunca erişilebilir olacaktır. templatetags klasörü ihtiyaç duyduğunuz her yere yerleştirilebilir ve farklı adlara da sahip olabilir. Django docs den

Özelleştirilmiş örnek: "project_core" - ama aynı çözüm:

OPTIONS={ 
    'libraries': { 
     'myapp_tags': 'path.to.myapp.tags', 
     'project_tags': 'project.templatetags.common_extras', 
     'admin.urls': 'django.contrib.admin.templatetags.admin_urls', 
    }, 
} 
+1

Bunu daha net hale getirmek için, bu etiketin çağrıldığı şablon html dosyasında, '{% common_extras%}' etiketini normal olarak çağırmadan önce '% load project_tags%}' gerekir. – h4k1m

İlgili konular