有了用户,有了关注系统,接下来,在自己喜欢的球队页面下面,发布文章,也是一个日常使用频率很高的功能。
不想很简单地只做一个输入框,所以下载了一个Django里面可用的Markdown编辑器 mdeditor
作者的Github是
https://github.com/pylixm/django-mdeditor
按照作者的使用说明,一步一步傻瓜式操作,就可在页面上生成Markdown的编辑器了
如何使用就请看作者的说明。我只记录一下我这里的效果,首先还是加入settings里的app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mainsite',
'team',
'users',
'mdeditor',
]
其次,对文章系统进行模型建立, 注意,article_content这个字段,我就是用的是插件的字段MDTexdField
而team则是文章和球队建立起一对多的关系,文章是“多”侧,球队是“一”侧
user是文章和用户建立起一对多的关系,文章是“多”侧,球队是“一”侧
在Article类下面,我还另外进行了ArticleForm的建模,他继承自ModelForm这个类,这个功能就是,通过模型,可以直接生成表单,下面Meta里的model属性就是告诉表单,我是要和哪个类进行匹配,而exclude则是告诉表单,除了这2个字段我不想在表单生成是显示,其他都需要显示。
关于详细的ModelForm功能,可以参考https://docs.djangoproject.com/en/2.1/topics/forms/modelforms/#django.forms.ModelForm
class Article(models.Model):
article_id = models.AutoField('文章序号',primary_key=True)
article_title = models.CharField('文章标题',max_length=150)
article_content = MDTextField('文章内容',max_length=1000)
team = models.ForeignKey(Team,on_delete=models.CASCADE)
user = models.ForeignKey(User,on_delete=models.CASCADE,null=True,blank=True,default=None)
def __str__(self):
return self.article_title
class ArticleForm(ModelForm):
class Meta:
model = Article
exclude = ['team','user']
模型建立完之后,来到views视图
根据URL地址内的球队编号,过滤出所有这个球队相关的文章
如果请求是GET,只是显示空白表单,如上面建模时候所显示,除了team和user之外,都不会进行渲染,而article_id这个字段因为是AutoField,无法被ModelForm渲染,所以前端只会渲染文章标题和文章内容这2个内容。
from django.shortcuts import render,redirect
from mainsite.models import *
# Create your views here.
def team_page(request,team_id):
team_name = Team.objects.get(team_id=team_id)
team_articles = Article.objects.filter(team_id=team_id)
if request.method == "GET":
article_form = ArticleForm()
elif request.method == 'POST':
form = ArticleForm(request.POST)
f = form.save(commit=False)
f.user = request.user
f.team_id = team_id
f.save()
return redirect('team:team_page',team_id=team_id)
return render(request,'team_page.html',{'team_name':team_name,'team_articles':team_articles,'article_form':article_form})
最后,来看下前端渲染页面
{% extends 'base_page.html' %}
{% load staticfiles %}
{% block title %}球队介绍{% endblock %}
{% block content %}
<img src="{% static '/team_icon/' %}{{team_name.team_english_name}}.png" width="110" height="110">
{{team_name.team_chinese_name}}
<p>简介</p>
来自于{{team_name.team_location}}的球队
<br>
文章列表:
<ul>
{% for i in team_articles %}
<li><a href="{% url 'team:article_detail' i.article_id %}">{{i.article_title}}</a></li>
{% endfor %}
</ul>
{% if user.is_authenticated %}
<form method="post">
{% csrf_token %}
{{article_form.media}}
{{article_form.as_p}}
<button type="submit">提交</button>
</form>
{% endif %}
{% endblock %}
效果图如下,在页面上显示有多少和这个球队相关的文章,后续再做分页功能吧.
球队页面
网友评论