Как Django выбирает имя шаблона для CreateView, когда я его не указываю - PullRequest
0 голосов
/ 23 марта 2019

Как CreatePostView в views.py ссылается на post_form.html.

В нем нет "template_name", но как ссылка createpostview ссылается на post_form.html?

Пожалуйста, посмотрите следующие коды, которые я добавил ниже, и дайте мне знать, если вы можете помочь, Спасибо!

Views.py

from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.utils import timezone
from .models import Post, Comment
from .forms import PostForm, CommentForm

from django.views.generic import (TemplateView,ListView,
                                  DetailView,CreateView,
                                  UpdateView,DeleteView)

from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin

class CreatePostView(LoginRequiredMixin,CreateView):
    login_url = '/login/'
    redirect_field_name = 'blog/post_detail.html'

    form_class = PostForm

    model = Post

urls.py

from django.urls import path
from . import views


urlpatterns = [
    path('post/new/', views.CreatePostView.as_view(), name='post_new'),
]

post_form.html

{% extends 'blog/base.html' %}

{% block content %}
    <h1>New post</h1>

    <form method="POST" class="post-form">
    {% csrf_token %}
    {{form.as_p}}
    <button type="submit" class="save btn btn-default">Save</button>
    </form>

    <script>var editor = new MediumEditor('.editable');</script>

{% endblock %}

Пожалуйста, помогите мне понять это.

1 Ответ

1 голос
/ 23 марта 2019

Для модели Post в приложении myapp CreateView будет использовать шаблон myapp/post_form.html.

. Это просто задокументированное поведение из CreateView.

Возможно, вам будет полезно взглянуть на метод get_template_names на веб-сайте ccbv, чтобы понять, как работает код.

...