如何使用Markdownx库使用文件字段或内容文件保存Django模型字段?

时间:2019-01-14 01:05:45

标签: django-models django-forms markdown

我不是网络程序员,所以描述性越强越好。我正在编写django应用程序,它将允许我创建,编辑和查看以markdown编写的文件。我使用的是第三方库“ markdownx”,基本上是给我一种视图的表单类型(我将以某种文本编辑器的方式使用)来创建和编辑markdown文件。这是一个记笔记工具,我将在以下步骤中尝试使用它...

  1. 使用markdownx表单,为当日添加新的注释条目,将所有必要的信息输入到表单的每个字段中。
  2. 由于该文件不存在,因此按Submit将把'content'字段(类型为MarkdownxField())写入文件。

  1. 使用markdownx表单(以与上面相同的方式),我为当天添加了另一个注释条目,但这一次只需要编辑表单中的“内容”字段即可。
  2. 由于该文件已经存在,所以我只需要编辑表单中的“内容”字段,然后单击提交,文件就会被新的“已编辑”的“内容”字段覆盖。

我以前从未做过,而且我很费力地弄清楚如何将模型中的字段(NotesModel,请参见下文)写入markdown文件。具体来说,我想获取模型的“内容”字段(类型为“ MarkdownxField()”)并将其写入文件。

1)如何将“内容”字段写入文件,这在我的项目层次结构中是如何完成的(例如,我的views.py?)。

2)我假设我必须为模型创建另一个字段?应该是“ ContentFile()”还是“ FileField()”类型?

notes / admin.py

from django.contrib import admin
from django.db import models
from markdownx.admin import MarkdownxModelAdmin
from .models import NotesModel

admin.site.register(NotesModel, MarkdownxModelAdmin)

notes / models.py

from django.db import models
from markdownx.models import MarkdownxField
from markdownx.utils import markdownify
from django.utils import timezone

class NotesModel(models.Model):
    notes_type = models.CharField(max_length=100)
    notes_memo = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    created_at = models.DateField(default=timezone.now)
    # I'm guessing I'll need to add another field here?
    # Perhaps something like...
    # notes_file = models.FileField(upload_to='notes/')
    content = MarkdownxField()

    @property
    def formatted_markdown(self):
        return markdownify(self.content)
    def __unicode__(self):
        return self.notes_type

notes / views.py

from django.shortcuts import render
from .models import NotesModel

def index(request):
    notes = NotesModel.objects.all
    return render(request, 'notes/notes.html', {'notes': notes,})

notes / urls.py

from django.urls import path
from . import views
urlpatterns = [path('notes/', views.index, name='index'),]

notes / templates / notes / base.html

<!DOCTYPE html>
<html>
<head>
    <title>Notes</title>
</head>
<body>
    {% block content %}{% endblock content %}
</body>
</html>

notes / templates / notes / notes.html

{% extends "notes/base.html" %}
{% block content %}
{% csrf_token %}
    {% for note in notes %}
        <h1>Type: {{ note.notes_type }}</h1>
        <h1>Author: {{ note.author }}</h1>
        <h1>Created At: {{ note.created_at }}</h1>
        <p>Memo: {{ note.notes_memo }}</p>
        <p>{{ note.formatted_markdown|safe }}</p>
    {% endfor %}
{% endblock %}

预期结果将是每天与笔记模型相关联的文件。因此,我想您可能会说我每天在数据库中都有一个NotesModel引用,该引用具有与之相关的上述字段,包括一个'notes_file'。我希望将此文件保存到“ MyNoteFiles / year / month”之类的文件夹下的项目中。

--projectfolder
----MyNoteFiles
------2019
--------Jan
----------Jan_1_2019.md
----------Jan_2_2019.md
--------Feb
----------Feb_1_2019.md
----settings.py
----urls.py
----(and so on...)
----notes
------templates/notes
--------(and so on...)
------admin.py
------apps.py
------models.py
------urls.py
------(and so on...)

0 个答案:

没有答案