Как сделать так, чтобы при нажатии на кнопку создавался новый html-файл?

Я работаю над проектом django, пытаясь создать форум.

Теперь, когда пользователь создает новую тему, мне нужно, чтобы создавался новый html файл с уникальным url.

Например, если пользователь создает тему с заголовком "Какой лучший язык программирования?", должен быть создан новый html файл с некоторым стандартным шаблоном (и функция в views.py, а также путь в urls.py) и url должен быть что-то вроде "mysitetitle.com/what's-the-best-programming-language?".

Это будет соответствующий код моего проекта.

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 %}

Вам не нужно создавать новые HTML файлы для каждого отдельного форума, потому что HTML шаблоны Django предназначены для многократного использования, поэтому вы можете использовать один шаблон для всех ваших форумов.

Итак, вам нужен способ передачи соответствующих данных для каждого форума (таких как названия, сообщения и т.д.) в шаблон, который затем будет отображаться в Django view.

Сначала вам понадобится база данных Модель для ваших форумов, чтобы вы могли сохранять данные каждого форума в вашей базе данных. Затем, вы будете использовать комбинацию переменных пути 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())
]
Вернуться на верх