Pergunta

[Eu tenho essa discussão em http: // grupos. google.com/group/django-users/browse_thread/thread/989c569d5118980d]

é 'django.template.loaders.app_directories.load_template_source' requerida nos TEMPLATE_LOADERS configuração para etiquetas modelo personalizado para trabalhos?

Sabemos que simplesmente ter uma marca personalizada no diretório templatetags de sua aplicação Django faz com que a tag disponíveis para uso na aplicação.

No caso do carregamento de modelos, nós sabemos que ter 'django.template.loaders.filesystem.load_template_source' nas TEMPLATE_LOADERS configuração em conjunto com entradas apropriadas em TEMPLATE_DIRS permite Django a modelos de carga do diretórios especificados. Isso é muito claro e lógico. Mas, no caso de marcas de modelo personalizado, eu vê-los se tornar magicamente disponível.

Então, você tem alguma idéia de como tags de modelos personalizados são encontrados / carregado / manuseado?

Foi útil?

Solução

Não, django.template.loaders.app_directories.load_template_source não é de todo necessário para etiquetas modelo personalizado para o trabalho.

Você não tem que especificar diretórios para dizer ao Django onde-da carga templatetags bibliotecas (como fazemos em caso de modelos), apenas coz Django assume para encontrar templatetags bibliotecas em aplicações especificadas no INSTALLED_APPS lista.

Ele só faz um loop sobre a lista de aplicações de INSTALLED_APPS, a importação de todas as bibliotecas de ' templatetags ' diretórios dentro e importar cada um para torná-los disponíveis. Se um diretório chamado templatetags não for encontrado, ele simplesmente ignora. Mas, ele não tentar olhar para todas as opções disponíveis em INSTALLED_APPS.

Você pode dar uma olhada no código na django/templatetags/__init__.py, e você vai saber como templatetags feita (magicamente) disponível. Olhe para o código,

from django.conf import settings

for a in settings.INSTALLED_APPS:
    try:
        __path__.extend(__import__(a + '.templatetags', {}, {}, ['']).__path__)
    except ImportError:
        pass

É apenas adicionar aqueles lista de módulos para __path__. E qualquer coisa listado para __path__ será tratado, como se ele também existe como um sub-módulo do módulo cuja lista __path__ qual ela aparece.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top