Невозможно войти в шаблон PostCreateView - PullRequest
1 голос
/ 26 мая 2020

Я создал проект блога и по неизвестной причине не могу получить доступ к PostCreateView.

Я продолжаю получать ошибку Page 404, хотя у меня есть шаблоны URL-адресов

Я также получаю сообщение об ошибке

score.views.PostDetailView

Вот views.py

class PostCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView):
    model = Post
    fields = ['title', 'design']
    template_name = "post_form.html"
    success_url = "/score/"
    success_message = "Your Post has been submitted"

    def form_valid(self, form):
        form.instance.designer = self.request.user
        return super().form_valid(form)

вот PostDetail Views.py

class PostDetailView(DetailView):
    model = Post
    template_name = "post_detail.html"

    def get_context_data(self, *args, **kwargs):
        context = super(PostDetailView, self).get_context_data()
        post = get_object_or_404(Post, slug=self.kwargs['slug'])
        total_likes = post.total_likes()
        liked = False
        if post.likes.filter(id=self.request.user.id).exists():
            liked = True
        context["total_likes"] = total_likes
        context["liked"] = liked
        return context

Вот Urls.py

app_name = 'score'

urlpatterns = [
    path('', PostListView.as_view(), name='score'),
    path('<slug:slug>/', PostDetailView.as_view(), name='post-detail'),
    path('new/', PostCreateView.as_view(), name='post-create'),
    path('user/<str:username>', UserPostListView.as_view(), name='user-posts'),
]

вот панель навигации html, которая меня принимает на страницу

  <a class="nav-link waves-effect" href="{% url 'score:post-create' %}" >Upload Post</a>

вот шаблон post_form

                <form method="POST" enctype="multipart/form-data">
                    {% csrf_token %}
                    <fieldset class="form-group">
                        <legend class="border-bottom mb-4" style="padding-top: 20px;">Upload Your Post</legend>
                        {{ form|crispy }}

                    </fieldset>
                    <div class="form-group">
                        <button class="btn btn-outline-info ml-0" type="submit">Upload</button>
                    </div>        
                </form>

1 Ответ

1 голос
/ 26 мая 2020

Проблема в том, что ваш <slug:slug> также будет захватывать такие значения, как new. Таким образом, этот путь будет "активирован", и представление обнаружит, что нет объекта Post с 'new' как slug.

Вы можете поменять местами path(&hellip;) s, но тогда вы можете никогда не обращайтесь к Post с помощью slug new. Как показывает опыт, лучше делать path(&hellip;) с перекрытием без , например:

app_name = 'score'

urlpatterns = [
    path('', PostListView.as_view(), name='score'),
    path('<b>post/<slug:slug>/</b>', PostDetailView.as_view(), name='post-detail'),
    path('new/', PostCreateView.as_view(), name='post-create'),
    path('user/<str:username>', UserPostListView.as_view(), name='user-posts'),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...