block.super返回NoReverseMatch

时间:2017-04-05 21:33:52

标签: python django django-templates

我正在学习Django,我遇到模板问题。

我正在尝试向扩展模板添加内容。

我的代码结构:

base.html
category
     -- category_detail.html
     -- list_content.html

category_detail.html

{% extends 'base.html' %}
{% block title %}
    {{ category_name  }}
{% endblock %}

{% block description %}
    {{ category_description }}
{% endblock %}

{% block content %}
    <div class="col-md-10 text-center">
    <a href="{% url 'charts:category_error_list' category_name %}" id="list-button" class="btn btn-success btn-lg active" role="button" aria-pressed="true">Error list</a>
    </div>
{% endblock %}

带按钮的简单子页面。按钮应重定向到另一个模板,hovewer它给我NoReverseMatch。

list_content.html(在视图中定义了category_error_list)

{% extends 'category/category_detail.html' %}

{% block content %}
   {{ block.super }}
   <h1 class="page-header"> Some string</h1>
{% endblock %}

我想要实现的是在按钮下显示“Some string”。 (我知道应该用AJAX做得更好,但我想学习基础知识)。

urls.py

urlpatterns = [
    url(r'^category/$', views.categories_list, name='categories'),
    url(r'^category/(?P<category_name>\w+)/$', views.category_detail, name='category_detail'),
    url(r'^category/(?P<category_name>\w+)/list/$', views.category_error_list, name='category_error_list'),
] 

views.py

# ${url}/category/${category}
def category_detail(request, category_name):
    cat_detail = Category.objects.get(name=category_name)
    return render(request, 'charts/category/category_detail.html',
                 {'category_name': cat_detail.name,
                 'category_description': cat_detail.description})

#${url}/category/${category}/list
def category_error_list(request, category_name):
    category_with_errors = Category.objects.filter(name=category_name)
    error_list = Error.objects.get(category=category_with_errors)
    return render(request, 'charts/category/list_content.html',
                 {'errors_list': error_list})

问题似乎与urls.py有关,但我找不到有什么问题。

堆栈跟踪:

Template error:
In template                 
/usr/src/app/analizer/charts/templates/charts/category/list_content.html, error at line 0
Reverse for 'category_error_list' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['category/(?P<category_name>\\w+)/list/$']   
1 : {% extends 'category/category_detail.html' %}
2 : 
3 : {% block content %}
4 :    {{ block.super }}
5 :    <h1 class="page-header"> Cos tam </h1>
6 : {% endblock %}
7 : 
8 : 

如果我将删除block.super标记,它正在运行,但我正在覆盖父模板上的内容。我做错了什么?

我正在使用Django-1.9.4。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案 - 这对我来说不直观 - 但它正在发挥作用。

查看<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-with-addons.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-dom.min.js"></script>缺少category_error_list变量,所以我修复了它但是:

category_name