2017-07-10 12 views
1

私はいつもNoReverseMatchというエラーを受け取りましたが、その理由はわかりません。 これはエラーメッセージです:/ suche /任意の-ものでDjango NoReverseMatch return render()

NoReverseMatch /引数を指定して 'article_search' '(u'any事'、)のための

リバース」が見つかりません。 1つのパターンを試しました:['suche /(?P [ - \ w] +)/ $']

私が見ることができるように、空白の代わりに " - "しかし、Djangoは " - "の代わりにスペースでURLパターンを探しています。

これは私のURLパターンです:エラー、私は "印刷()" 文で確認したよう

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}) 

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

は、驚くべきことにDjangoはこのようになりますこれは、私のarticle_search_viewを計算するために開始しますreturn render(...)文が呼び出されると呼び出されます。 代わりにreturnリダイレクト(...)を実行すると、エラーは発生しません。完全、私の記事/する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 %} 

は、あなたがより多くの情報が必要なら、私に教えてください。

+0

を投稿されたフォームデータではなく、URLで送信しようとしているのはなぜですか。 –

+0

試して正規表現を次のように変更してください: 'r'suche /(?P [\ w \ - ] +)/ $ ''それがうまくいくかどうかを確認してください –

+0

N.イワノフ:試してみましたが、 、同じエラー Daniel Rosemann:包括的なURLが必要なのです – FantaRainer

答えて

1

searchを変更し、ハイフンをスペースで置き換えます。これにより、URLパターンでスペースが許可されないため、テンプレートでurlタグを使用するとエラーが発生します。

{% url url_origin parameter %} 

あなたは、テンプレートコンテキストに元の検索スラグを追加することで問題を解決できます。

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 %} 
+0

ありがとう、解決策はありますか? – FantaRainer