2013-02-27 43 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