У меня сообщение об ошибке NoReverseMatch в / app1 / add_post / - PullRequest
0 голосов
/ 03 августа 2020

Каждый раз, когда я пытаюсь обновить или создать сообщение в создаваемом блоге, эта ошибка всегда выскакивает, она сохраняет информацию, но не перенаправляет страницу на URL-адрес, на который я ее отправляю. Вот код, чтобы вы, ребята, могли его проверить.

Models.py

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from datetime import datetime, date
# Create your models here.


class Category(models.Model):
    name = models.CharField(max_length= 255)
    
    def __str__(self):
        return self.name 
    

class Post(models.Model):
    title = models.CharField(max_length= 255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField()
    post_date = models.DateField(auto_now_add=True)
    category = models.CharField(max_length=255, default = 'coding')

    def __str__(self):
        return self.title + ' | ' + str(self.author)
    
    def get_absolute_url(self):
        return reverse('app1:article-detail', args =(str(self.id)))

views.py

from django.shortcuts import render
from django.contrib.auth import authenticate, login, logout
from django.urls import reverse, reverse_lazy
from .forms import  PostForm, PostUpdateForm
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .models import Post, Category



# Create your views here.
def index(request):
    return render(request, 'app1/index.html')

class PostView(ListView):
    model = Post
    template_name = 'app1/post.html'
    ordering = ['post_date']

class ArticleDetailView(DetailView):
    model = Post
    template_name = 'app1/article_details.html'

class AddPostView(CreateView):
    model = Post
    form_class = PostForm
    template_name = 'app1/createpost.html'
    success_url = reverse_lazy('app1:article-detail')
    #fields = '__all__'

class UpdatePostView(UpdateView):
    model = Post
    form_class = PostUpdateForm
    template_name = 'app1/update_post.html'

class DeletePostView(DeleteView):
    model = Post
    template_name = 'app1/delete_post.html'
    success_url = reverse_lazy('index')

class AddCategoryView(CreateView):
    model = Category
    template_name = 'app1/add_category.html'
    fields = '__all__'
    success_url = reverse_lazy('app1:Post')               

urls.py

from django.urls import path
from app1 import views
from .views import PostView, ArticleDetailView, AddPostView, UpdatePostView, DeletePostView, AddCategoryView

app_name = 'app1'

urlpatterns = [
    path('post/', PostView.as_view(), name = 'Post'),
    path('article/<int:pk>', ArticleDetailView.as_view(), name = 'article-detail'),
    path('add_post/',AddPostView.as_view(), name='addpost'),
    path('update_post/<int:pk>', UpdatePostView.as_view(), name = 'updatepost'),
    path('delete_post/<int:pk>', DeletePostView.as_view(), name = 'deletepost'),
    path('add_category/', AddCategoryView.as_view(), name = 'add_category')
]

urls.py

from django.contrib import admin
from django.urls import path, include
from app1 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name = "index"),
    path('app1/', include('app1.urls')),
    path('members/', include('django.contrib.auth.urls')),
    path('members/', include('members.urls'))
]

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Post, Category

#choices = [('coding', 'coding'), ('sports', 'sports'), ('entertainment', 'entertainment')]
choices = Category.objects.all().values_list('name', 'name')

choice_list = []

for item in choices:
    choice_list.append(item)


class PostForm(forms.ModelForm):

    class Meta:
        model = Post
        fields = ('title', 'author','category', 'body')

        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Title', 'length':'100px'}),
            'author': forms.Select(attrs={'class': 'form-control'}),
            'category': forms.Select(choices = choice_list,attrs={'class': 'form-control', 'placeholder': 'Choices'}),
            'body': forms.Textarea(attrs={'class': 'form-control'})
        }

class PostUpdateForm(forms.ModelForm):

    class Meta:
        model = Post
        fields = ('title', 'body')

        widgets = {
        'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Title'}),
        'body': forms.Textarea(attrs={'class': 'form-control'})
        }

Ошибка:

NoReverseMatch в / app1 / add_post / Reverse для 'article-detail' с никаких аргументов не найдено. Пробовали 1 шаблон (ы): ['app1 / article / (? P [0-9] +) $'] Метод запроса: URL-адрес запроса POST: http://127.0.0.1: 8000 / app1 / add_post / Django Версия: 3.0.3 Тип исключения: NoReverseMatch Значение исключения: Обратный вариант для «детали статьи» без аргументов не найдено. Пробовали 1 шаблон (ы): ['app1 / article / (? P [0-9] +) $'] Местоположение исключения: C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ lib \ site-packages \ django \ urls \ resolvers.py в _reverse_with_prefix, строка 677 Python Исполняемый файл: C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ python .exe Python Версия: 3.8.3 Python Путь: ['C: \ Users \ snin2 \ Desktop \ basura \ lapagina', 'C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ python38.zip', 'C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ DLLs ',' C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ lib ',' C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv ',' C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ lib \ site-packages '] Время сервера: понедельник, 3 августа 2020 г. 20:53:37 + 0000

Я не уверен, почему я получаю эту ошибку так как я использую обратную функцию.

...