Django写博客形式

问题描述 投票:0回答:2

[作为Django的初学者,我知道如何使用字段标题和内容的Django模型来为博客创建基本的网站。就这样。

但是现在我想创建一个真正的动态博客表单,该表单可以包含多个子标题,代码块,文本块和图像。

或者基本上是博客表格,可以具有任意数量的此类块(如代码,文本,图像等字段)。用户可以根据需要添加任意数量的这些块。

此外,这些将成为博客文章一部分的块(或字段),应以与用户创建时相同的顺序保存在数据集中。

我该如何实现?

感谢您的时间。

javascript python html django django-forms
2个回答
0
投票

一种非常简单的方法是添加一个所见即所得的编辑器软件包。

您拥有最流行的SummernoteCKEditorTinymice

它们每个的安装确实非常容易和直接,因此您不会有任何问题。

您还可以在djangopackages网站上查看您可能需要的所有内容。这是查找注释部分包,新闻稿等内容的好地方。


0
投票

这可能对您有用-

注意:我没有运行此代码。所有的代码都是我在stackoverflow中编写的。请原谅我有错字。

models.py

from django.db import models

class Blog(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    // and more fields if you want

    def blog_field_exists(self):
        return self.blogfield_set.count() > 0

    def __str__(self):
        return self.title

class BlogField(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    image_url = models.URLField(blank=True, null=True) // blank means image is 
    // optional
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

views.py

from django.views import generic
from .models import Blog

{...}

class BlogDetailView(generic.DetailView)
    model = Blog
    template_name = 'app/blog_detail.html'

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('<int:pk>', views.BlogDetailView.as_view(), name='blog_view')
]

admin.py

from django.contrib import admin
from .models import *

class BlogFieldInline(admin.TabularInline)
    model = BlogField
    extra = 1

class BlogAdmin(admin.ModelAdmin):
    inlines = [BlogFieldInline]

admin.site.register(BlogField)
admin.site.register(Blog, BlogAdmin)

templates / app / blog_detail.html

{...} // previous code

{% for blog in blog_list %}
<h1>{{blog.title}}</h1>
<p>{{blog.body}}</p>
{% if blog.blog_field_exists %}
    {% for field in blog.blogfield_set.all %}
        <div style="margin: 1rem 0;">
            <hr>
            <h4>{{field.title}}</h4>
            <p>{{field.body}}</p>
            <img src="{{field.image_url}}" alt="{{field.title}}" />
            <hr>
        </div>
    {% endfor %}
{% endif %}
{% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.