2015-12-09 10 views
0

У меня была эта ошибка раньше, но я не мог ее исправить, поэтому я вернулся к предыдущему состоянию git. Теперь я должен это исправить, почему эта ошибка продолжается? И что это значит? Это происходит из index.html {% url vote_for_post%} Вот мой код, спасибо заранее.NoReverseMatch в/почему это происходит?

views.py

def index(request): 

    categories = Category.objects.order_by('likes') 
    latest_posts = list(Post.objects.order_by('pub_date')[:50]) 
    hot_posts = sorted(latest_posts, key=lambda x: x.hot(), reverse=True) 
    controversial_topics = sorted(latest_posts, key=lambda x: x.controversy(), reverse=True) 

    context_dict = { 
     'latest_posts': latest_posts, 
     'categories': categories, 
     'hot_posts': hot_posts, 
     'controversial_topics':controversial_topics 
    } 
    return render(request, 'main/index.html', context_dict) 

def vote_for_post(request, category_name, post_id): 
    category = get_object_or_404(Category, name=category_name) 
    post = get_object_or_404(Post, id=post_id, category=category) 

    if request.POST['type'] == 'upvote': 
     post.upvotes += 1 
    if request.POST['type'] == 'downvote': 
     post.downvotes += 1 

    post.save() 

    if request.POST['referer'] == 'index': 
     return HttpResponseRedirect(reverse('main:index')) 
    if request.POST['referer'] == 'category': 
     return HttpResponseRedirect(reverse('main:category', args=(category.name,))) 

urls.py

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 

    #url(r'^add_post/', views.add_post, name='add_post'), 
    url(r'^add_post/$', PostCreateView.as_view(), name='post-add'), 
    url(r'^vote/$', views.vote_for_post, name='vote_for_post'), 
    url(r'^(?P<slug>[\w|\-]+)/edit/$', PostUpdateView.as_view(), name='post-edit'), 
    url(r'^(?P<slug>[\w|\-]+)/delete/$', PostDeleteView.as_view(), name='post-delete'), 


    url(r'^add_category/', views.add_category, name='add_category'), 
    url(r'^(?P<slug>[\w|\-]+)/$', views.post, name='post'), 

    url(r'^category/(?P<category_name_slug>[\w\-]+)/$', views.category, name='category'), 

] 

index.html

<div class="row placeholders"> 
      <div class="col-sm-8"> 
       <div class="row"> 
        {% if hot_posts %} 
      {% for vote in hot_posts %} 
       <article> 
         <div class="vote"> 
          <form method="post" style="display: inline" 
           action="{% url vote_for_post %}"> 
           <input type="hidden" value="upvote" name="type"> 
           <input type="hidden" value="index_page" name="referer"> 
           <button type="submit">+</button> 
           {% csrf_token %} 
          </form> 
          <form method="post" style="display: inline" 
           action="{% url 'main:vote' vote.category.name vote.id %}"> 
           <input type="hidden" value="downvote" name="type"> 
           <input type="hidden" value="index_page" name="referer"> 
           <button type="submit">-</button> 
           {% csrf_token %} 
          </form> 
         </div> 


       </article> 
       <hr> 
      {% endfor %} 
     {% else %} 
      <p>No topics are available.</p> 
     {% endif %} 
    </div> 
    </div> 
    </div> 
+0

Можете ли вы изменить свой вопрос, чтобы добавить полную информацию о вашей ошибке? Но в основном ошибка происходит, потому что вы пытаетесь использовать URL-адрес, который не определен. Это может произойти либо в '{% url%}' в шаблоне, либо в 'reverse()' в views.py. –

+0

Также в вашем шаблоне 'action =" {% url vote_for_post%} ">' должно быть 'action =" {% url 'vote_for_post'%} ">' с одинарными кавычками. –

+0

Включили ли вы 'main.urls' в свой' project.urls'? –

ответ

0

Как я вижу, «add_post »,« vote »и« add_category »являются ambiguo мы с вашим «slug» из-за регулярного матча.

url(r'^(?P<slug>[\w|\-]+)/$', views.post, name='post'),

url(r'^vote/$', views.vote_for_post, name='vote_for_post'),

url(r'^add_post/$', PostCreateView.as_view(), name='post-add'),

url(r'^add_category/', views.add_category, name='add_category'),

Попытка дать лучший идентификатор для URL-адресов.

например.

url(r'^(?P<slug>[\w|\-]+)/$', views.post, name='post'), 
url(r'^vote/post/$', views.vote_for_post, name='vote_for_post'), 
url(r'^add/post/$', PostCreateView.as_view(), name='post-add'), 
url(r'^add/category/$', views.add_category, name='add_category'), 

Дайте мне знать, если это поможет.

0

Из документации Django: https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#url

{% url 'some-url-name' v1 v2 %} 

В вашем коде вы должны добавить ' ' к названию в теге шаблона url.

<form method="post" style="display: inline" action="{% url vote_for_post %}"> 

должно быть:

<form method="post" style="display: inline" action="{% url 'vote_for_post' %}"> 

О NoReverseMatch at/u'main' is not a registered namespace.

Снимите 'main:' в вашем (reverse('main:index')) и reverse('category', args=(category.name,)) в вашем views.py

if request.POST['referer'] == 'index': 
     return HttpResponseRedirect(reverse('index')) 
    if request.POST['referer'] == 'category': 
     return HttpResponseRedirect(reverse('category', args=(category.name,))) 
+0

Да, я прочитал документацию и последовал за ней так же, как и вы, но все равно получаю ту же ошибку.Я получаю NoReverseMatch по адресу/ Обратный для '' с аргументами '()' и аргументами ключевого слова '{}' не найден. 0 образцов (ы): [] Что это значит? –