【问题标题】:How to have a new html file created when a button is clicked?单击按钮时如何创建新的html文件?
【发布时间】:2022-02-14 21:30:16
【问题描述】:

我正在做一个 django 项目,试图创建一个论坛。

现在当用户创建一个新线程时,我需要创建一个具有唯一 url 的新 html 文件。

例如,如果用户创建了一个标题为“最好的编程语言是什么?”的话题。必须创建一个带有一些标准模板的新 html 文件(以及 views.py 中的函数以及 urls.py 中的路径),并且 url 应该类似于“mysitetitle.com/what's-the-best-programming-语言?”。

那将是我项目的相关代码。

views.py

def create_thread(request):
    form = CreateForm()

    if request.method == "POST":
        form = CreateForm(request.POST)
        if form.is_valid():
            f = form.save(commit=False)
            f.benutzername = request.user
            f.save()
            messages.success(request, "Thread has been created.")

create_thread.html

{% extends "forum/index.html" %}
{% load static %}
{% block title %} Create Thread {% endblock %}
{% block content %}

<div class="container-create">
    <h2 class="heading-create">Diskussion erstellen</h2>
    {% if messages %}
        {% for message in messages %}
            <div class="thread-info">{{ message }}</div>
        {% endfor %}
    {% endif %}
    {% if not user.username %}
        <div class="guest-login">As <span class="guest">Guest</span> or <a class="login-link" href="../login">Login</a></div>
    {% endif %}

    <form method="POST" action="">
        {% csrf_token %}
        <label class="label-create-topic" for="create-topic">Topic</label>
        {{form.topic}}
        <label class="label-create-title" for="create-title">Title</label>
        {{form.title}}
        <label class="label-create-content" for="create-content">Content</label>
        {{form.content}}
        <button class="submit-create" id="submit-create" type="submit" value="Create">Create</button>
    </form>

</div>
{% endblock %}

【问题讨论】:

  • 您可以创建一个 Django 视图来呈现您的论坛页面的 HTML 模板。同一个模板可用于呈现所有论坛的 HTML,因此无需创建多个 HTML 文件
  • 您好,谢谢您的回答。你能详细说明你的想法吗?我必须说我是初学者,所以是的......

标签: python html django


【解决方案1】:

您不需要为每个论坛创建新的 HTML 文件,因为 Django HTML 模板是可重复使用的,因此您可以为所有论坛使用一个模板。

因此,您需要一种方法将每个论坛的相关数据(例如标题、帖子等)传递给模板,然后由 Django 视图呈现。

首先,您需要为您的论坛创建一个数据库模型,以便您能够将每个论坛的数据保存在您的数据库中。然后,您将使用 Django 在 URL 中的路径变量和 Django 视图函数的组合来获取相关数据并将其传递给您的模板。

这里有一个例子:

models.py

from django.db import models

class ForumModel(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)

在 models.py 中,我为您的论坛定义了一个示例数据库模型。您需要根据自己的需要对其进行自定义。

views.py

from django.views import View
from .models import ForumModel

class ForumView(View):
    def get(self, request, forum_title):
        forum = ForumModel.objects.get(title=forum_title)
        # Render your template here by passing your data to the template

urls.py

from django.urls import path
from .views import ForumView

urlpatterns = [
    # Use path parameter forum_title to pass data from url to django view
    path("forums/<str:forum_title>", ForumView.as_view())
]

【讨论】:

  • 附带说明,遵循 Django 的教程会很有用,因为它更详细地介绍了这些概念
  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-08-18
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
相关资源
最近更新 更多