Segundo tiempo pidiendo más detalles …

Me gustaría tener un proyecto de amplia templagetags directorio de la común
tags utilizados por todas las Aplicaciones, a continuación, cada aplicación puede tener sus propias etiquetas si necesita así.

Digamos que tengo:

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

Donde:

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" %}

Funcionaría esto? No funcionó para mí. No puede encontrar la proj1_tags a la carga.

InformationsquelleAutor un33k | 2009-05-21

4 Comentarios

  1. 44

    No sé si este es el derecho manera de hacerlo, pero en mi Django apps, yo siempre lugar común de la plantilla de etiquetas en un lib «app», así:

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

    Sólo asegúrese de añadir la lib app a tu lista de INSTALLED_APPS en settings.py.

    • Yo generalmente el nombre de la aplicación después de que el proyecto: «project_core» – pero de la misma solución.
    • common o commons podría ser un buen nombre también.
    • cómo usted lo que llaman en los archivos html? Sólo {% load common_tags %}?
    • Sí, eso es.
    • El nombre del módulo en el interior de tempaltetags es el mismo que el paquete/nombre de la aplicación (por ejemplo, lib.py).
  2. 17

    Desde Django 1.9, no es necesario crear más common app como han mencionado otros. Todo lo que necesita hacer es agregar una ruta de acceso al proyecto templatetags directorio a la settings.py‘s OPTION['libraries'] dict.

    Después de eso, estas etiquetas serán accesibles a través de todo el proyecto. El templatetags carpeta se puede colocar donde usted necesita y también puede tener un nombre diferente.

    Ejemplo personalizado de la Django docs:

    OPTIONS={
        'libraries': {
            'myapp_tags': 'path.to.myapp.tags',
            'project_tags': 'project.templatetags.common_extras',
            'admin.urls': 'django.contrib.admin.templatetags.admin_urls',
        },
    }
    • Solo para aclarar, en la plantilla de html donde esta etiqueta se llama uno necesita {% load project_tags %} primero antes de llamar a la etiqueta normalmente utilizando {% common_extras %}.
    • All you need to do is to add a path to your project puede elaborar en esta parte y dar un ejemplo de la estructura del proyecto, mostrando la templatetags directorio no dentro de una aplicación?
    • Me parece que tengo trabajo para un templatetags directorio en el mismo nivel de manage.py. El uso de 'mytest_tags': 'templatetags.mytest_tags'. He __init.py__ dentro de templatetags directorio y también un archivo de python llamado mytest_tags.py
    • Añadir un público app para todos los templatetags y funciones. Esta opción funciona para mí. Django versión 2.17
  3. 3

    Django registros templatetags globalmente para cada aplicación en INSTALLED_APPS (y es por eso que su solución no funciona: proyecto no es un aplicación como se entiende por Django) — están disponibles en todas las plantillas (que fue registrado correctamente).

    Generalmente tengo una aplicación que se encarga de funciones varios (como el sitio de la página de inicio) y poner templatetags no está relacionado con ninguna aplicación en concreto no, pero esto es puramente cosmético.

  4. 0

    Django trabaja por la App. Ellos se refieren en el INSTALLED_APPS configuración.

    Sugiero dividir todo lo relacionado a una aplicación diferente. Para su templatetags problema, usted podría crear una app llamada ‘common_tags’. A continuación, el programa de instalación de la INSTALLED_APPS configuración para utilizarla, y usted será capaz de cargar el común de las etiquetas de las plantillas, así:

    {% load XXXX %}

Dejar respuesta

Please enter your comment!
Please enter your name here