Problem loading custom template tags (Error: No module named x)

做~自己de王妃 提交于 2019-12-10 01:55:06

问题


I am currently writing a few custom template tags but for some reason they will not load. My directory structure is as follows:

MyProj
 |
 ----MyApp
     |
     |----templatetags
          |
          |----myapp_tags.py
          |----__init__.py

In myapp_tags.py

from django.template import Library, Node
from myproj.myapp.models import Product

register = Library()

class LatestProductsNode(Node):
    def render(self, context):
        context['recent_products'] = Product.objects.all()[:5]
        return ''

def get_latest_products(parser, token):
    return LatestProductsNode()

get_latest_products = register.tag(get_latest_products)

In settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'myproj.myapp',
)

In the Template

{% load myapp_tags %}

The error i get when trying to load the page:

Exception Type:     TemplateSyntaxError Exception Value:    

'myapp_tags' is not a valid tag library: Could not load template library from django.templatetags.myapp_tags, No module named myapp_tags

回答1:


in settings.py, you should never name the project 'myproj' explicitely. In INSTALLED_APPS, just use 'myapp'. Also, you should have this :

TEMPLATE_LOADERS = (
    'django.template.loaders.app_directories.load_template_source',
)

And be sure to have an __init__.py in the myapp folder as well as in templatetags.

Use manage.py shell then from myapp.templatetags import myapp_tags to find out if theres any python error in the myapp_tags.py file.

Also, be sure that myapp_tags.py file name doesnt conflicts with another folder/file in your project.

Hope this helps.




回答2:


One thing that's tripped me up is that the magic importing of templatetags bypasses the automatic reloading of the development server. If the following works in manage.py shell

>>> from django.templatetags import myapp_tags
>>>

Then everything is actually working and you just need to reload the development server. If on the other hand you get an ImportError then something is wrong and you should check your INSTALLED_APPS, that you have an __init__.py file in the templatetags directory and all the other things suggested in the other answers.

This will probably only apply to a tiny fraction of the people who experience template tag loading problems, but this is the second time I've arrived at this question in as many weeks and both times it's just taken restarting the development server to get things working.




回答3:


Some reasons:

  1. due to error in templatetgs code.
  2. If you have used model import in templatetags

For #2, for example. If you are doing:

from your_app2.models import model

This will go wrong, so instead above, you should do

from your_project.your_app2.models import model

It worked me this way.




回答4:


I just came across the same problem in Django 2 and realized that the custom template tag files must have unique names across all of your project apps.




回答5:


The problem is that nyapp_tags is not at the top level of an installed project. If you put myproj.myapp.templatetags in INSTALLED_APPS, you should be fine.



来源:https://stackoverflow.com/questions/1483927/problem-loading-custom-template-tags-error-no-module-named-x

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!