Как исправить «TypeError: post_details () получил неожиданный аргумент ключевого слова 'slug'" - PullRequest
0 голосов
/ 10 февраля 2019

Я создаю свой блог с помощью django и пытаюсь создавать URL-адреса постов, после того, как я напишу его модели и вызову его в представлениях, он покажет мне эту ошибку:

[TypeError at / posts /post / why-i-love-python-django /,

post_details () получил неожиданный аргумент ключевого слова 'slug']

Я попытался изменить «id» в [posts / views.py line: 102] и сделал его «slug»,также отредактировал его в [line: 104]

в [posts / view.py line: 102]:

def post_details(request, id):
   post_list = Post.objects.active()
   post = get_object_or_404(Post, id=id)
   if post.publish > timezone.now().date() or post.draft:
        if not request.user.is_authenticated or not request.user.is_superuser:
             raise Http404

    share_string = quote_plus(post.content)

    initial_data = {
        "content_type": post.get_content_type,
        "object_id": post.id,
    }

    # post read time 
    read_time = get_read_time(post.content)
    # print(type(read_time))

    form = CommentForm(request.POST or None, initial=initial_data)

   if form.is_valid():
        c_type = form.cleaned_data.get('content_type')
        content_type = ContentType.objects.get(model=c_type)
        obj_id = form.cleaned_data.get('object_id')
        content_data = form.cleaned_data.get('content')
        parent_obj = None
        try:
            parent_id = int(request.POST.get('parent_id'))
        except:
            parent_id = None

        if parent_id:
            parent_qs = Comment.objects.filter(id=parent_id)
            if parent_qs.exists() and parent_qs.count() == 1:
                 parent_obj = parent_qs.first()

        new_comment, created = Comment.objects.get_or_create(
            user = request.user,
            content_type = content_type,
            object_id = obj_id,
            content = content_data,
            parent = parent_obj,
        )
        return HttpResponseRedirect(new_comment.content_object.get_absolute_url())

     comments = post.comments # Comment.objects.filter_by_instance(post)  # without @property

     context = {
        'post': post,
        'share_string': share_string,
        'comments': comments,
        'comment_form': form,
        'read_time': read_time,
    }
    return render(request, 'post.html', context=context)

Я ожидал, что почтовый слаг будет создан и правильно добавлен в URL

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Решение: эта проблема решена путем редактирования [post.html] в строке: 53

<!-- path: {% url 'posts:post' id=post.id %} <br>  -->

и создания приемлемого «комментария django», такого как: {# #}, потому что сервер не может отобразитьhtml комментарии, поэтому я отредактировал так:

{# path: {% url 'posts:post' id=post.id %} #}<!-- <br> -->
0 голосов
/ 10 февраля 2019

Ваша функция post_details принимает параметры request (которые должны принимать все представления Django) и id, но в urls.py вы извлекаете параметр с именем slug.Ваша функция должна принимать этот параметр вместо id.

...