Ни один продукт не соответствует данному запросу. Django - PullRequest
1 голос
/ 11 июля 2020

Я создал BlogPost класс. Затем были созданы ListView BlogPostListView и blogpost_detail.

ADDED diff для всех изменений, которые повлияли на ошибку - https://pastebin.com/DyukCYq9

Когда я нажал, чтобы опубликовать имя (на этой странице https://edamer.ru/blog_posts/)

Меня перенаправили на действующий URL. Но вместо страницы product_detail я получил ошибку:

Страница не найдена. http://127.0.0.1: 8001 / blog_post / 1 /

Создано: blog.views.product_detail. Ни один продукт не соответствует заданному запросу.

Я не могу понять, почему product_detail() вызывается вместо blogpost_detail() Также в тексте ошибки указано Product ( Product - это название другой модели в моем приложении. Но я звонил BlogPost (не Продукт)

Я пробовал

  1. python управлять. py flu sh # очистить базу данных
  2. Просмотрите мои изменения. Но не нашел вызовов product_detail()

Я думаю, что ошибка связана с недопустимыми URL

Мой код

views.py

def product_detail(request, **kwargs):
    product = get_object_or_404(Product, pk=kwargs["pk"])
    shops = Shop.objects.all()
    return render(request, 'blog/product_detail.html', {'product': product, 'shops': shops})


class BlogPostListView(ListView):
    model = BlogPost
    template_name = 'blog/post_list.html'
    page_kwarg = 'blog_post'
    context_object_name = 'blog_posts'


def blogpost_detail(request, **kwargs):
    post = get_object_or_404(BlogPost, pk=kwargs["pk"])
    return render(request, 'blog/post_detail.html', {'post': post})

urls.py

urlpatterns = [
    path('', HomePageView.as_view(), name='main_list'),
    path('search/', SearchResultsView.as_view(), name='search_results'),
    path('search_shop/<slug:slug>/', ProductListView.as_view(), name='search_shop'),
    path('search_shop_results/<slug:slug>/', ProductSearchResultsView.as_view(), name='search_shop_results'),
    path('<slug:slug>/<int:pk>/', views.product_detail, name='product_detail'),

    path('shops/', ShopListView.as_view(), name='shop_list'),
    path('contacts/', views.contacts, name='contacts'),

    path("robots.txt", TemplateView.as_view(template_name="blog/robots.txt", content_type="text/plain")),
    url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
    url(r'^favicon\.ico$', RedirectView.as_view(url='/static/favicon.ico'), name='favicon'),

    path('register/', views.RegisterFormView.as_view(), name="register"),
    path('login/', views.LoginFormView.as_view(), name="login"),
    path('logout/', views.LogoutView.as_view(), name="logout"),

    path('blog_posts/', views.BlogPostListView.as_view(), name='post_list'),
    path('blog_post/<int:pk>/', blogpost_detail, name='blogpost_detail'),
]

post_list. html

{% for post in blog_posts %}
        <a href="{% url 'blogpost_detail' post.pk %}" style="text-decoration: none;color:inherit;">
            {{post.title}}
        </a>
        <p>{{post.prev_text}}</p>
        <br>
{% endfor %}

post_detail. html

<h1>Post detail</h1>

<div class="container" style="margin-top: 40px; font-size: 1.2rem; padding-left: 0px;">
    <h1>{{post}}</h1>
</div>

1 Ответ

1 голос
/ 12 июля 2020

Думаю, вы импортировали свое представление таким образом

from . import views

Значит, вам нужно получить его таким образом

path('blog_post/<int:pk>/', views.blogpost_detail, name='blogpost_detail'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...