python - 返回 render() 时 Django NoReverseMatch

标签 python django django-urls

我总是收到 NoReverseMatch 错误,但我不知道为什么。 这是错误消息:

NoReverseMatch at /suche/any-thing/

Reverse for 'article_search' with arguments '(u'any thing',)' not found. 1 pattern(s) tried: ['suche/(?P[-\w]+)/$']

正如你所看到的,我输入的 url 中包含“-”而不是空格,但 Django 正在寻找带有空格而不是“-”的 url 模式。

这是我的网址模式:

    url(r'suche/(?P<search>[-\w]+)/$', views.article_search_view, name='article_search'),

令人惊讶的是,Django 开始计算我的article_search_view,如下所示:

def article_search_view(request, search=None):
"""Filters all articles depending on the search and renders them"""

articles = get_active_not_rented_articles()
search = re.sub(r"[-]", ' ', search)
articles = articles.filter(title__icontains=search)
articles = aply_sort(request, articles)
orderd_by = articles[0].get('filter')
articles = articles[1]
return render(request, 'article/list.html', {'object_list':articles, 'url_origin':'article_search', 'parameter':search,
'orderd_by':orderd_by})

当我检查“print()”语句时,调用 return render(...) 语句时会引发错误。 如果我改为返回重定向(...),则不会引发错误。 为了完整起见,我的article/list.html模板:

{% extends "base.html" %}
{% load static %}

{% block content %}

<div id =articles>
<div class="info_filter">
<div class="header_info_filter">
  {% if orderd_by == "not" %}
  <h1>Neueste Artikel</h1>
  {% endif %}
  {% if orderd_by == "distance" %}
  <h1>Artikel in Ihrer Nähe</h1>
  {% endif %}
  {% if orderd_by == "price_asc" %}
  <h1>Günstigste Artikel zuerst</h1>
  {% endif %}
  {% if orderd_by == "price_des" %}
  <h1>Teuerste Artikel zuerst</h1>
  {% endif %}
</div>

<div class="selection">
  {% if parameter1 %}
  <form action="{% url url_origin parameter1 parameter2 %}" method="post" accept-charset="utf-8">
    {% else %}
    {% if parameter %}
    <form action="{% url url_origin parameter %}" method="post" accept-charset="utf-8">
      {% else %}
      <form action="{% url url_origin %}" method="post" accept-charset="utf-8">
        {% endif %}
        {% endif %}
        {% csrf_token %}
        <div class="select_filter">
          <select name="filter" id="filter" >
            <option value="distance">Entfernung</option>
            <option value="price_asc">Preis, aufsteigend</option>
            <option value="price_des">Preis, absteigend</option>
          </select>
          <div class="search_filter_btn">
            <button type="submit" name="button">Sortieren</button>
          </div>
        </div>

      </form>
    </div>
    {% if parent_categorys %}
    <div class="category-path">
      Ergebnisse für:
      {% for category in parent_categorys %}
      <a href="{% url 'article_category' category.slug %}"> > {{ category.name }}</a>
      {% endfor %}
      {% if parameter2 %}
      : {{ parameter2}}
      {% endif %}
    </div>
    {% else %}
    Ergebnisse für: {{ parameter}}
    {% endif %}
  </div>
  <div id="main" class="article_list">
    {% for article in object_list %}
    <div class="item">
      <div class="list_img">
        <a href="{{ article.get_absolute_url }}">
          <img src="{% if article.main_picture %}{{ article.main_picture.url }}{% else %}{% static "img/no_image.png" %}{% endif %}">
        </a>

      </div>
      <div class= "articles_fee" >
        {{ article.fee }} €
      </div>
      <a href="{{ article.get_absolute_url }}">{{ article.title }}</a>
    </div>
    {% endfor %}
  </div>

</div>
{% endblock %}

如果您需要更多信息,请告诉我。

最佳答案

在您看来,您更改了搜索并将连字符替换为空格。当您在模板中使用 url 标记时,这会导致错误,因为 URL 模式不允许空格。

{% url url_origin parameter %}

您可以通过将原始搜索 slug 添加到模板上下文来解决该问题:

def article_search_view(request, search=None):
    """Filters all articles depending on the search and renders them"""
    search_slug = search
    articles = get_active_not_rented_articles()
    search = re.sub(r"[-]", ' ', search)
    ...
    return render(request, 'article/list.html', {'object_list':articles, 'url_origin':'article_search', 'parameter':search, 'search_slug': search_slug, 'orderd_by':orderd_by})

然后更改 url 标记:

{% url url_origin search_slug %}

关于python - 返回 render() 时 Django NoReverseMatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45015498/

相关文章:

python - 如何将局部变量动态添加到动态创建的 Python 类方法中

PHP 与 django 一起在 heroku 实例中

django - 在 change_form_object_tools.html 模板中使用对象的 id

python - 我试图用 c 中的逻辑在 python 中实现行计数程序

python - 散点图覆盖的 matplotlib 轴刻度标签(使用脊柱)

django - django __in 查找查询集的效率

django - 如何正确反转 Django 身份验证登录?

python - 如何将变量从一个 View 传递到另一个 View 并在 Django 中使用最后一个 View 的 URL 进行渲染?

python - 在 stackless python 中,通过 channel 发送的数据是不可变的吗?

django - djangorestframework 中的 Get 方法允许任意