[作为Django的初学者,我知道如何使用字段标题和内容的Django模型来为博客创建基本的网站。就这样。
但是现在我想创建一个真正的动态博客表单,该表单可以包含多个子标题,代码块,文本块和图像。
或者基本上是博客表格,可以具有任意数量的此类块(如代码,文本,图像等字段)。用户可以根据需要添加任意数量的这些块。
此外,这些将成为博客文章一部分的块(或字段),应以与用户创建时相同的顺序保存在数据集中。
我该如何实现?
感谢您的时间。
一种非常简单的方法是添加一个所见即所得的编辑器软件包。
您拥有最流行的Summernote,CKEditor和Tinymice。
它们每个的安装确实非常容易和直接,因此您不会有任何问题。
您还可以在djangopackages网站上查看您可能需要的所有内容。这是查找注释部分包,新闻稿等内容的好地方。
这可能对您有用-
注意:我没有运行此代码。所有的代码都是我在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 %}