CreateView странное поведение. Идет к неправильному мнению? - PullRequest
1 голос
/ 22 мая 2019

В моем urls.py у меня есть ListView и CreateView.Когда у меня есть оба представления в шаблонах URL, CreateView показывает HTML, связанный с ListView.Но когда я удаляю ListView из шаблонов url, CreateView показывает правильный html.

urls.py

Если он у меня такой, CreateView показывает html

* 1006 ListView.*

Таким образом, CreateView ведет себя так, как я хочу.Показывает правильный HTML

urlpatterns = [
    path("", views.TopicListView.as_view(), name="topic"),
    path("create/", views.CreatePostView.as_view(), name="create_post")
]

views.py

class PostListView(ListView):
    model = models.ForumPost
    template_name = "forum/post_list.html"

    def get_context_data(self):
        context = super().get_context_data()
        return context

    def get_queryset(self):
        query_set = super().get_queryset()
        return query_set

class CreatePostView(CreateView):
    model = models.ForumPost
    fields = ("title", "description")
    template_name = "forum/create_post.html"

1 Ответ

3 голосов
/ 22 мая 2019

Причина, по которой URL-адреса проверяются по одному сверху вниз. Итак, когда у вас есть 3 URL:

urlpatterns = [
    path("", views.TopicListView.as_view(), name="topic"),
    path("<topic>/", views.PostListView.as_view(), name="post"),
    path("create/", views.CreatePostView.as_view(), name="create_post")
]

И попробуйте использовать create/, это на самом деле соответствует шаблону <topic>/ при передаче строки. Так что я рекомендую поместить его очень вниз:

urlpatterns = [
    path("", views.TopicListView.as_view(), name="topic"),
    path("create/", views.CreatePostView.as_view(), name="create_post")
    path("<topic>/", views.PostListView.as_view(), name="post"),
]

Но также было бы лучше, если бы вы добавили какой-нибудь дополнительный путь к URL, чтобы он не был двойным, как list/<topic>/.

...