2013-02-27 95 views
2

抱歉,我在我束手無策就在這裏。我有這樣的代碼在本地工作,但在服務器上的一些原因,當我嘗試運行這個標籤,我得到一個錯誤,我不知道爲什麼。這裏是模板代碼:無效的塊標籤:「keywords_for_order」,預計「端塊」

{% load blog_tags keyword_tags i18n future %} 

{% block blog_keywords %} 
{% keywords_for_order blog.blogpost as tags %} 
{% if tags %} 
<h3>{% trans "Tags" %}</h3> 
<ul class="unstyled tags"> 
{% for tag in tags %} 
<li> 
    <a href="{% url "blog_post_list_tag" tag.slug %}" 
     class="tag-weight-1">{{ tag }}</a> 
    ({{ tag.item_count }}) 
</li> 
{% endfor %} 
</ul> 
{% endif %} 
{% endblock %} 

而這裏的keyword_tags.py文件:

from django.contrib.contenttypes.models import ContentType 
from django.db.models import Model, Count 

from mezzanine import template 
from mezzanine.conf import settings 
from mezzanine.generic.fields import KeywordsField 
from mezzanine.generic.models import AssignedKeyword, Keyword 


register = template.Library() 

@register.as_tag 
def keywords_for(*args): 
    """ 
    Return a list of ``Keyword`` objects for the given model instance 
    or a model class. In the case of a model class, retrieve all 
    keywords for all instances of the model and apply a ``weight`` 
    attribute that can be used to create a tag cloud. 
    """ 

    # Handle a model instance. 
    if isinstance(args[0], Model): 
     obj = args[0] 
     if hasattr(obj, "get_content_model"): 
      obj = obj.get_content_model() or obj 
     # There can only be one ``KeywordsField``, find it. 
     for field in obj._meta.many_to_many: 
      if isinstance(field, KeywordsField): 
       break 
     else: 
      return [] 
     keywords_manager = getattr(obj, field.name) 
     return [a.keyword for a in keywords_manager.select_related("keyword")] 

    # Handle a model class. 
    try: 
     app_label, model = args[0].split(".", 1) 
    except ValueError: 
     return [] 

    content_type = ContentType.objects.get(app_label=app_label, model=model) 
    assigned = AssignedKeyword.objects.filter(content_type=content_type) 
    keywords = Keyword.objects.filter(assignments__in=assigned) 
    keywords = keywords.annotate(item_count=Count("assignments")) 
    if not keywords: 
     return [] 
    settings.use_editable() 
    counts = [keyword.item_count for keyword in keywords] 
    min_count, max_count = min(counts), max(counts) 
    sizes = settings.TAG_CLOUD_SIZES 
    step = (max_count - min_count)/(sizes - 1) 
    if step == 0: 
     steps = [sizes/2] 
    else: 
     steps = range(min_count, max_count, step)[:sizes] 
    for keyword in keywords: 
     c = keyword.item_count 
     diff = min([(abs(s - c), (s - c)) for s in steps])[1] 
     keyword.weight = steps.index(c + diff) + 1 
    return keywords 



@register.as_tag 
def keywords_for_order(*args): 


    # Handle a model instance. 
    if isinstance(args[0], Model): 
     obj = args[0] 
     if hasattr(obj, "get_content_model"): 
      obj = obj.get_content_model() or obj 
     # There can only be one ``KeywordsField``, find it. 
     for field in obj._meta.many_to_many: 
      if isinstance(field, KeywordsField): 
       break 
     else: 
      return [] 
     keywords_manager = getattr(obj, field.name) 
     return [a.keyword for a in keywords_manager.select_related("keyword")] 

    # Handle a model class. 
    try: 
     app_label, model = args[0].split(".", 1) 
    except ValueError: 
     return [] 

    content_type = ContentType.objects.get(app_label=app_label, model=model) 
    assigned = AssignedKeyword.objects.filter(content_type=content_type) 
    keywords = Keyword.objects.filter(assignments__in=assigned) 
    keywords = keywords.annotate(item_count=Count("assignments")).order_by('-item_count')[:2] 
    if not keywords: 
     return [] 

    return keywords 

這裏的錯誤,我得到:

Error during template rendering 

In template /home/USERNAME/webapps/lion_dev/lion/roar/templates/blog/includes/tagcloud_panel.html, error at line 4 
Invalid block tag: 'keywords_for_order', expected 'endblock' 

1 {% load blog_tags keyword_tags i18n future %} 
2 
3 {% block blog_keywords %} 
4 {% keywords_for_order blog.blogpost as tags %} 
5 {% if tags %} 
6 <h3>{% trans "Tags" %}</h3> 
7 <ul class="unstyled tags"> 
8 {% for tag in tags %} 
9 <li> 
10  <a href="{% url "blog_post_list_tag" tag.slug %}" 
11   class="tag-weight-1">{{ tag }}</a> 
12  ({{ tag.item_count }}) 
13 </li> 
14 {% endfor %} 

所以,是的,我不知道爲什麼這個模板標籤文件沒有被看到。所以它不是,它是有它的初始化 .py文件了。最好的,感謝您的幫助,

傑克

回答

1

你在夾層直接編輯keyword_tags.py文件?

你不應該 - 如果你已經做了正確的事情,它複製到你的項目或應用程序以某種方式,沒準夾層版本是越來越加載,而不是您的版本。嘗試給它一個不同的名稱,以便它們不會相互碰撞。

+0

嘿斯蒂芬,是的,我不能直接編輯它,當時的想法是覆蓋有點像你應該如何與模板定製做夾層的版本,但我會再次嘗試。當我導入不同的文件時,我遇到了同樣的錯誤。 – Jake 2013-02-27 20:58:48

相關問題