【问题标题】:Why markdown widget is not displayed with django-markdown in django-admin backend?为什么在 django-admin 后端中没有使用 django-markdown 显示 markdown 小部件?
【发布时间】:2019-12-13 05:54:07
【问题描述】:

我正在 Django 中制作博客应用程序,并希望在管理站点中为包含博客文章数据的 Posts 模型添加 Django-Markdown 字段。

我需要对以下代码进行哪些更改?

我正在使用 Django:2.2.4 和 Django-Markdown-App: 0.9.6

这是我的帖子模型

ONE = 1
TWO = 2

status_choices = (
    (ONE, 'draft'),
    (TWO, 'published')
)


class Posts(models.Model):
    title = models.CharField(max_length=255, blank=False)
    content = MarkdownField()
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)
    author = models.ForeignKey(
        User,
        on_delete=models.CASCADE
    )
    status = models.IntegerField(choices=status_choices, default=ONE)
    slug = models.SlugField(max_length=255)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "Post"
        verbose_name_plural = "Posts"

这里是 admin.py 代码

from django.contrib import admin
from .models import Posts
from django_markdown.admin import MarkdownModelAdmin


# Register your models here.
class PostsAdmin(MarkdownModelAdmin):
    prepopulated_fields = {'slug': ('title',)}


admin.site.register(Posts, PostsAdmin)

这里是 settings.py

INSTALLED_APPS = [
......,
'django_markdown',
......,
]
MARKDOWN_EDITOR_SKIN = 'markitup'

这里是项目级 urls.py

urlpatterns = [
.......
 path('markdown/', include('django_markdown.urls')),
.......
]

我希望在管理站点中显示一个 markdown 界面,而不是一个简单的文本字段,但当前的输出是一个简单的文本字段。

【问题讨论】:

    标签: python django python-3.x django-models django-admin


    【解决方案1】:

    似乎找不到 jQuery 脚本。你可以试试这个自定义的 adminModel 吗?

    from django_markdown.admin import MarkdownModelAdmin
    
    class PostsAdmin(MarkdownModelAdmin):
        prepopulated_fields = {'slug': ('title',)}
    
        class Media:
            js = (
                'https://code.jquery.com/jquery-3.4.1.min.js',  # adds jquery script
            )
    
    admin.site.register(Posts, PostsAdmin)
    

    (有些东西阻止了对django-admin Jquery的访问,通常可以与对象django.jQuery一起使用)

    【讨论】:

    • 但是兄弟,它在编写降价后没有提供预览。你能帮我解决这个问题吗?
    • 我需要检查包裹中是否包含它。也许在浏览器中打开控制台以检查是否有任何错误消息可以在这里提供帮助
    • 哦,是的,当我在 django 管理视图中单击预览按钮时,它给出了这个错误 POST 127.0.0.1:8000/markdown/preview 403 (Forbidden)
    • 我认为像 js 一样需要为此指定 CSS 但不知道如何做到这一点?
    • 我认为如果没有 django-markdown-app 包中的修复程序无法加载预览:ajax 调用被阻止(403 错误),因为 crsftoken 在当时似乎未定义调用以设置 ajax 处理程序。如果在加载页面后启动此设置,则可以修复此问题。顺便说一句,我的答案的肮脏解决方法可以通过使用管理后端(django.jQuery)中提供的 jQuery 版本来避免,但它也需要在包中修复。我认为您应该在 github 项目上打开一个问题以实施全局修复。如果您需要更多详细信息,请告诉我;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多