Реверс для 'update_comment' с аргументами '(' ',)' не найден. Попробован 1 шаблон (ов): ['comment \\ / (? P <news_pk> [0-9] +) $'] - PullRequest
0 голосов
/ 25 апреля 2018

Я кодирую новостной сайт. Теперь я детализирую с помощью функции поста комментария. И отвечаю на вопрос:

Reverse for 'update_comment' with arguments '('',)' not found. 1 pattern(s) tried: ['comment\\/(?P<news_pk>[0-9]+)$']

Я пробовал много раз и раз, но все еще не могу решить это, и я не могу найти что-то не так с моим кодом. И мне действительно нужна ваша помощь.

Функция поста комментария находится в news_detail.html. В моем проекте есть два важных приложения новости и операция комментарий модели под операция

Вот мой root urls.py :

path('news', include(('news.urls', 'news'), namespace="news")),
path('', include(('operation.urls', 'operation'), namespace="operation")),

Вот news / urls.py

path('-<int:news_pk>', newsDetailView, name="news_detail")

Вот операция / urls.py:

path('comment/<int:news_pk>', views.update_comment, name="update_comment"),

Вот news / view.py

def newsDetailView(request, news_pk):
    news = News.objects.get(id=news_pk)
    title = news.title
    author = news.author_name
    add_time = news.add_time
    content = news.content
    category = news.category
    tags = news.tag.annotate(news_count=Count('news'))

    all_comments = NewsComments.objects.filter(news=news)
    return render(request, "news_detail.html", {
        'title': title,
        'author': author,
        'add_time': add_time,
        'content': content,
        'tags': tags,
        'category': category,
        'all_comments': all_comments,
    })

Вот операция / views.py

def update_comment(request, news_pk):
    news = News.objects.get(id=news_pk)
    comment_form = CommentForm(request.POST or None)
    if request.method == 'POST' and comment_form.is_valid():
        if not request.user.is_authenticated:
            return render(request, 'login.html', {})
        comments = comment_form.cleaned_data.get("comment")
        news_comment = NewsComments(user=request.user, comments=comments, news=news)
        news_comment.save()

        return render(request, "news_detail.html", {
            'news_comment': news_comment,
            'news':news
        })

А вот и news_detail.html:

{% if user.is_authenticated %}

<form method="POST" action="{% url 'operation:update_comment' news.pk %}">{% csrf_token %}              

<textarea id="js-pl-textarea" name="comment"></textarea>      

<input type="submit" id="js-pl-submit" value="发表评论"></input></form>

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вы не передаете объект news в контекст для news_detail.html .Вы можете сильно упростить представление, просто передав news и выполнив в шаблоне такие вещи, как {{ news.title }} (вместо {{ title }}):

def newsDetailView(request, news_pk):
    news = get_object_or_404(News, id=news_pk)
    tags = news.tag.annotate(news_count=Count('news'))
    all_comments = NewsComments.objects.filter(news=news)

    return render(request, "news_detail.html", {
        'news': news,
        'tags': tags,
        'all_comments': all_comments,
    })

Теперь news.pk будет работать в качестве аргумента для вашего{% url ... %} тег.Я также гарантировал, что ошибка 404 генерируется, если объект news не может быть найден (в вашем коде он будет аварийно завершаться).

0 голосов
/ 25 апреля 2018
{% url 'some-url-name' arg1=v1 arg2=v2 %}

ref: https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#url

исправлено: Ваш код правильный. Ошибка подсказка, что:

 arguments '('',)' not found. 

 arguments '('',)'
...