Django: 'current_tags' không phải là thư viện thẻ hợp lệ


78

Tôi có một dự án Django nhỏ mà tôi nhận được từ một người bạn. Mã hoạt động hoàn hảo trên hệ thống của anh ấy. Tuy nhiên, trên hệ thống của tôi, tôi nhận được thông báo lỗi sau khi chạy máy chủ:

TemplateSyntaxError tại /

'current_tags' không phải là thư viện thẻ hợp lệ: Không tìm thấy thư viện mẫu current_tags, đã thử django.templatetags.current_tags

Vấn đề là với một dòng trong tệp html:

{% load current_tags %}

Mã chính xác này hoạt động trên hệ thống của anh ấy mà không có lỗi. Đó có thể là gì?


78
Vì lợi ích của việc tiết kiệm cho người khác trong 20 phút tôi đã dành 20 phút để root thông qua những câu hỏi sau: nếu bạn vừa tạo tệp thẻ tùy chỉnh của mình (đây là thẻ tùy chỉnh đầu tiên của bạn trong một ứng dụng nhất định), bạn sẽ cần khởi động lại máy chủ phát triển Django. rằng nó có thể lấy tệp mới. Lỗi này được hiển thị khi đó cũng là vấn đề duy nhất của bạn.
chucksmash

2
@chucksmash Cảm ơn Chúa.
smilebomb

2
hãy nhớ khởi động lại máy chủ nhà phát triển
brainLoop

Câu trả lời:


87

Tôi sẽ đề xuất những điều sau:

  1. (Nhiều khả năng) Bạn chưa cài đặt một trong các phần phụ thuộc của thư viện thẻ của mình. Kiểm tra nhập bên trong current_tags.pymô-đun.

  2. Hãy chắc chắn rằng các ứng dụng bao gồm các thư viện thẻ được đăng ký tại settings.pydưới INSTALLED_APPS.

  3. Đảm bảo rằng bạn có thể nhập thành công thư viện thẻ.

    python manage.py shell
    >>> from app.templatetags import current_tags
    

    Điều này tóm tắt những gì liên kết sau đề xuất, đó là bản thân lỗi có xu hướng đánh lừa bạn về nơi nó đang tìm kiếm một mẫu. Nó âm thầm bỏ qua các lỗi khi nhập, có nghĩa là current_tags.pybản thân nó có thể có lỗi cú pháp hoặc một lý do khác khiến nó làm tăng ImportError.

Nếu mọi thứ khác không thành công, hãy kiểm tra liên kết này: http://www.b-list.org/weblog/2007/dec/04/magic-tags/


34
Nếu những cách đó không hoạt động, hãy kiểm tra thứ tự ứng dụng trong INSTALLED_APPS. Nếu một trong các ứng dụng của bạn sử dụng thẻ mẫu từ một ứng dụng khác, thì ứng dụng thứ hai đó theo định nghĩa là một phần phụ thuộc và phải được liệt kê trước đó.
JCotton

9
Nếu vẫn không hoạt động, hãy xóa các tệp .pyc của bạn và thử lại (cách đó đã giải quyết được sự cố của tôi một lần)
semente

3
Tương tự như nhận xét ở trên, tôi đã thử nhiều bản sửa lỗi và tôi không nhận thấy rằng các phiên bản bảng điều khiển Django khác đang được sử dụng, điều này khiến một số thư viện không làm mới! Nếu bạn cho rằng mọi thứ đều ổn và không tìm thấy sự cố, hãy đóng tất cả các phiên bản đang chạy và thử lại.
Nimo

20
Đừng quên để bật tính năng này và tắt một lần nữa;), có nghĩa là, đừng quên để khởi động lại máy chủ
tttthomasssss

1
Có thể đây là lời khuyên ngớ ngẩn nhưng hãy khởi động lại máy chạy của bạn. Bạn đã quen với việc tải lại mỗi khi bạn thay đổi mã python nhưng quá trình tải lại không được kích hoạt bằng cách thêm tệp thẻ mẫu mới hoặc nó không đăng ký thư viện thẻ mẫu mới.
nmgeek

77

Tôi đã gặp sự cố này và đã khắc phục nó bằng cách thêm một __init__.pytệp trống trong thư mục appname / templatetags / của tôi.


10
Tôi đã phải khởi động lại máy chủ nhà phát triển.
Gagandeep Singh

64

Có nhiều khả năng:

  1. Bạn chưa đặt lại máy chủ nhà phát triển của mình .
  2. Bạn có vòng lặp phụ thuộc trong tệp templatetag.
  3. Bạn viết sai chính tả điều gì đó (thư mục, thư mục, tên mẫu trong 'tải', v.v.).
  4. Bạn đã quên về việc thêm ứng dụng vào INSTALLED_APPS .

12

Khởi động lại máy chủ đã giải quyết được vấn đề cho tôi. Họ phải đã đề cập đến nó trong tài liệu.


6

Tôi cũng gặp lỗi tương tự nhưng vì một lý do khác nên tôi sẽ cho bạn biết (trong trường hợp người khác gặp phải vấn đề tương tự).

Tôi đã có mọi thứ đúng nhưng tôi có thẻ tùy chỉnh của mình bên trong một thư mục có tên template_tagsvà sau một thời gian dài tìm kiếm, tôi phát hiện ra rằng nó phải như vậy templatetags, và bây giờ nó hoạt động. Vì vậy, hãy kiểm tra tên thư mục có chính xác khôngtemplatetags .


Câu trả lời xuất sắc. Thông báo lỗi của Django không rõ ràng trong trường hợp này.
martincho

Tôi đã định thêm câu trả lời này, trong trường hợp nó chưa có ở đây. Chính xác là vấn đề của tôi: P
Luca Bezerra,

6

giả sử bạn có cấu trúc sau:

- Application_Name

------- templatetags

-------------- init .py

--------------templates_extras.py

------- init .py

-------settings.py

- management.py

Bạn phải đảm bảo những điều sau:

  • bản thân ứng dụng của bạn mà bên trong có "thẻ tạm thời" của bạn thực sự được cài đặt trong INSTALLED_APPS trong settings.py (ví dụ: "Application_Name")

  • bản thân mô-đun thẻ của bạn tồn tại bên trong "templatetags" đã được cài đặt trong INSTALLED_APP trong settings.py (ví dụ: "ApplicationName.templatetags.tempaltes_extras")

  • hãy đảm bảo rằng bạn có " init .py" trong thư mục templatetags

  • bạn phải khởi động lại máy chủ

  • Trong một số trường hợp, bạn phải xóa tất cả * .pyc đã tạo nếu nó không hoạt động sau đó thử lại


bản thân mô-đun thẻ của bạn tồn tại bên trong "templatetags" đã được cài đặt trong INSTALLED_APP trong settings.py (ví dụ: "ApplicationName.templatetags.templates_extras") Điều này rất quan trọng! Bạn sẽ cho rằng 'Tên ứng dụng' là đủ trong settings.py nhưng không phải vậy. Cảm ơn bạn!
cheenbabes

Không có mô-đun nào có tên 'ApplicationName.templatetags.templates_extras'
3pitt

5

"thẻ tùy chỉnh" không phải là lỗi thư viện thẻ hợp lệ, thường xảy ra hơn do thẻ tùy chỉnh không được tải vào ứng dụng.

đặt một init .py trống bên trong cùng một thư mục nơi đặt "thẻ mẫu tùy chỉnh" của bạn và chạy mã bên dưới trên thiết bị đầu cuối để tải các thẻ mẫu tùy chỉnh

touch __init__.py

Mặc dù có cấu trúc thư mục phù hợp và có tệp .py init ở đó ... Tôi đã gặp lỗi này cho đến khi tôi chạy lệnh này. Cảm ơn bạn!
mungojerie

Tôi vẫn gặp lỗi ModuleNotFound (khi tôi cố gắng khởi động lại máy chủ)
3pitt

4

Đối với những người khác phải đối mặt với điều này. Giả sử tên Ứng dụng của bạn là MyAppvà tên thư mục thẻ của bạn templatetagsthì settings.pybạn phải có:

INSTALLED_APPS = [
'MyApp',
'MyApp.templatetags'
]

Cả ứng dụng django và thư mục thẻ nằm trong gói ứng dụng của bạn đều cần thiết ở đó.

-> MyApp
    ---> models.py
    ---> views.py
    ---> templatetags
      -----> __init__.py
      -----> app_filters.py

Và trong tệp mẫu của bạn:

{% load app_filters %}

Cũng app_filters.pygiống như:

# coding=utf-8
from django import template

register = template.Library()


@register.filter(name='get_item')
def get_item(dictionary, key):
    return dictionary.get(key)

kiểm tra tất cả các bước trên và bạn có thể tìm thấy vấn đề.


1
Tôi đã từng mắc lỗi khi tải thẻ cụ thể chứ không phải tệp chứa thẻ. Cảm ơn rất nhiều
Ramtin

3

Hãy đảm bảo rằng thư mục templatetags của bạn được khởi tạo bằng python, nếu bạn nghi ngờ, chỉ cần lấy bakup của tất cả các tệp,

Xóa tất cả các tệp, bên trong thư mục templatetags chỉ tạo tệp init .py, sau đó khởi động lại máy chủ của bạn,

Bây giờ thư mục của bạn ở dưới Python, sau đó thực hiện công việc của bạn.

Điều này làm việc cho tôi ...


3

Đối với tôi, đó là sai lầm khi đặt dấu ngoặc kép xung quanh tên thư viện trong loadthẻ.

SAI LẦM: {% load 'library_name' %}

CHÍNH XÁC: {% load library_name %}

Tham khảo các câu trả lời khác nữa. Tôi cũng đã giải quyết một số vấn đề trước khi hạ cánh ở đây.


2

Đảm bảo rằng loadtuyên bố là chính xác. Nó phải là tên của tệp, không phải tên của ứng dụng. Ví dụ: nếu bạn có ứng dụng này:

appname
├── __init__.py
├── templatetags
│   ├── __init__.py
│   └── foobarfilename.py

Sau đó, bạn nên đặt cái này vào mẫu của mình:

{% load foobarfilename %}

Tất nhiên, bạn cũng nên kiểm tra các câu trả lời khác.


2

Sau khi bạn đã tạo thẻ mẫu và thẻ này phải nằm trong gói 'templatetags' trong ứng dụng được cài đặt trong cài đặt.INSTALLED_APPS, hãy đảm bảo rằng bạn khởi động lại máy chủ nhà phát triển của mình.


1

Có thể ai đó sẽ thấy điều này hữu ích: bằng cách nào đó tôi đã đặt tên thư mục 'templatetags 'thay vì 'templatetags', nghĩa là - với một khoảng trắng ở cuối. Mất nhiều giờ để cuối cùng nhận ra.


0

Tất cả những lời khuyên được liệt kê ở đây đã không giúp tôi. Vì vậy, trong trường hợp cụ thể của tôi, vấn đề là thẻ tạm thời phải được tải từ ứng dụng của bên thứ ba và tôi đã sao chép thủ công thư mục nguồn có ứng dụng đó vào srcthư mục trong virtualenv của mình. Sau đó tôi chạypython setup.py install bên trong thư mục đó. Sau đó django không thể tải mô-đun này.

Sau đó, tôi đã xóa nguồn và thư mục cài đặt của ứng dụng này và cài đặt nó bằng cách sử dụng pip install -r requirements.txtsau khi thêm một dòng có liên quan vào requirements.txttệp. Nó đã được tải xuống srcthư mục, được cài đặt và mọi thứ bắt đầu hoạt động bình thường. Hy vọng điều này sẽ giúp ai đó.


0

Trong trường hợp của tôi, tôi đã tạo phiên bản thư viện bằng cách sử dụng biến thẻ thay vì biến đăng ký

tag = template.Library()

Nhưng nó phải là

register = template.Library()

Để trở thành một thư viện thẻ hợp lệ, mô-đun phải chứa một biến cấp mô-đun có tên là thanh ghi là một mẫu.


0

Trong trường hợp của tôi, vấn đề là, tôi đang sử dụng {% load filter_method_name %}

Tôi đã phải thay đổi thành {% filename %}


0

Trong trường hợp của tôi, đó là - tôi đang sử dụng

@register.inclusion_tag('template-to-use.html')

Tôi đã quên tạo mẫu đó và ngay lập tức nó bắt đầu hoạt động. Tôi biết các câu trả lời ở trên liên quan nhiều hơn đến hầu hết các vấn đề - nhưng hy vọng có thể ai đó thấy nó hữu ích. Nó đáng lẽ phải nhận được đối với tôi:

Template does not exist

nhưng nó đã không và điều này đã hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.