You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django同Python视图类关联多个HTML页面失败求助

解决Django同一视图类关联多个HTML页面的问题

问题原因

你之前把template_name设为列表的方式不对——Django的TemplateResponseMixin中,列表形式的template_name是用来按顺序查找第一个存在的模板,并非根据不同URL返回对应模板,所以不管访问哪个路径,都会渲染第一个找到的模板,达不到预期效果。

解决方案

方法1:URL中直接指定模板(最简单)

修改urls.py,在as_view()方法中传入template_name参数,覆盖类的默认属性:

urlpatterns = [
    path(
        "diee/new",
        diee_view.DieeCreateView.as_view(template_name='diee_create.html'),
        name="diee_create",
    ),
    path(
        "diee/new/newthree",
        diee_view.DieeCreateView.as_view(template_name='diee_create_03.html'),
        name="diee_create_03",
    ),
]

视图类恢复默认单个模板(也可以不写,URL传入的参数优先级更高):

class DieeCreateView(DieeBaseView, FormView):
    """View to create a Diee"""
    form_class = DieeForm
    template_name = 'diee_create.html'  # 作为默认值

方法2:重写get_template_names()动态返回模板

如果需要根据请求条件(比如URL名称、请求参数)动态切换模板,重写视图类的get_template_names()方法:

class DieeCreateView(DieeBaseView, FormView):
    """View to create a Diee"""
    form_class = DieeForm

    def get_template_names(self):
        # 根据当前URL的name判断返回对应模板
        if self.request.resolver_match.url_name == 'diee_create_03':
            return ['diee_create_03.html']
        # 默认返回原模板
        return ['diee_create.html']

urls.py保持你原来的写法即可,无需额外修改。

方法3:继承视图类拆分(适合后续逻辑分化)

如果两个页面后续可能需要不同的逻辑处理,可以继承原视图类,仅修改template_name:

# 原视图类保持不变
class DieeCreateView(DieeBaseView, FormView):
    """View to create a Diee"""
    form_class = DieeForm
    template_name = 'diee_create.html'

# 新建子类,指定新模板
class DieeCreate03View(DieeCreateView):
    template_name = 'diee_create_03.html'

然后修改urls.py对应路径指向子类:

urlpatterns = [
    path(
        "diee/new",
        diee_view.DieeCreateView.as_view(),
        name="diee_create",
    ),
    path(
        "diee/new/newthree",
        diee_view.DieeCreate03View.as_view(),
        name="diee_create_03",
    ),
]

内容的提问来源于stack exchange,提问作者GotaKev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:50:16