问题
I'm creating my very first Django application (I'm also a novice at Python, so the problem could be anywhere.)
I'm following this tutorial step by step, to get the HTML editor at 5:53 (here), however I still get the default TextField at http://127.0.0.1:8000/admin/blog/entry/add/
Any help on diagnosing the problem would be appreciated. Thanks!
My Files :
projects/qblog/blog/admin.py :
from django.contrib import admin
from . import models
from django_markdown.admin import MarkdownModelAdmin
class EntryAdmin(MarkdownModelAdmin):
list_display = ("title" , "created")
prepopulated_fields = {"slug" : ("title", )}
admin.site.register(models.Entry, EntryAdmin)
projects/qblog/qblog/urls.py :
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns(
'',
url(r'^admin/', include(admin.site.urls)),
url(r'^markdown/', include("django_markdown.urls")),
)
projects/qblog/blog/models.py :
from django.db import models
# Create your models here.
class EntryQuerySet(models.QuerySet):
def published(self):
return self.filter(publish=True)
class Entry(models.Model):
title=models.CharField(max_length=200)
body = models.TextField()
slug = models.SlugField(max_length=200,unique = True)
publish = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add = True)
modified = models.DateTimeField(auto_now = True)
objects = EntryQuerySet.as_manager()
def __str__(self):
return self.title
class Meta:
verbose_name = "Blog Entry"
verbose_name_plural = "Blog Entries"
ordering = ["-created"]
projects/qblog/qblog/settings.py :
"""
Django settings for qblog project.
Generated by 'django-admin startproject' using Django 1.9.dev20150210173028.
For more information on this file, see
https://docs.djangoproject.com/en/dev/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/dev/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'secretkey'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
TEMPLATE_DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
'django_markdown',
]
MIDDLEWARE_CLASSES = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
]
ROOT_URLCONF = 'qblog.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'qblog.wsgi.application'
# Database
# https://docs.djangoproject.com/en/dev/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Internationalization
# https://docs.djangoproject.com/en/dev/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/dev/howto/static-files/
STATIC_URL = '/static/'
回答1:
In the video's comments you can get the answer. Modify the next files:
models.py
from django_markdown.models import MarkdownField
...
body = MarkdownField()
settings.py
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
# Markdown
MARKDOWN_EDITOR_SKIN = 'simple'
urls.py
...
from yourapp import settings
if settings.DEBUG:
from django.conf.urls.static import static
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
In shell run:
python manage.py collectstatic
回答2:
I have same problem. However, when I add Mr. iago1460's code without the urls.py
part,after I run:
python manage.py collectstatic,
the django_markdown
can work ,I use python 2.7 and django 1.8 version
the urls.py code here
from django.conf.urls import include, url
from django.contrib import admin
#import settings
#if settings.DEBUG:
#from django.conf.urls.static import static
#urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
urlpatterns = [
# Examples:
# url(r'^$', 'cblog.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^markdown/', include("django_markdown.urls")),
url(r'^',include('blog.urls')),
]
here is my project files ,my project name is cblog ,app is blog:
djtest/cblog/cblog:
__init__.py __init__.pyc settings.py settings.pyc urls.py urls.pyc wsgi.py wsgi.pyc
djtest/cblog:
blog cblog db.sqlite3 manage.py static
回答3:
Yeah i found this problem too when i was trying qblog tutorial. i'm using Python 3.4 and Django 1.8.1, But on the step to install markdown package, i decide to change the package into Django CKEditor.
Visit https://pypi.python.org/pypi/django-ckeditor to install.
After CKEditor has been installed properly, if you find the problem in import forms.util flattat when you are running the server. Change your widgets.py under ckeditor folder (on windows environment the directory is under C:\Python34\Lib\site-packages\ckeditor), then change the line :
from django.forms.util import flatatt
to
from django.forms.utils import flatatt
Follow in how to use CKEditor then implement it on your qblog. The result will be like this :
回答4:
Try this easier way:
in admin.py :
from django_markdown.admin import MarkdownModelAdmin
from django_markdown.widgets import AdminMarkdownWidget
from django.db.models import TextField
class EntryAdmin(MarkdownModelAdmin):
... #your_code
formfield_overrides = {TextField: {'widget': AdminMarkdownWidget}}
admin.site.register(models.Entry, EntryAdmin)
回答5:
This happens when you are using python 2x Now,what happens is that the stylesheets and javascript are not loaded
So what you can do is:
from django_markdown.widgets import AdminMarkdownWidget
from django.db.models import TextField
class EntryAdmin(MarkdownModelAdmin):
list_display = ("title", "created")
prepopulated_fields = {"slug": ("title",)}
# Next line is a workaround for Python 2.x
formfield_overrides = {TextField: {'widget': AdminMarkdownWidget}}
and this will work!!!!!!!!!!!!!
回答6:
Python 2.x You need add that:
formfield_overrides = {TextField: {'widget': AdminMarkdownWidget}}
来源:https://stackoverflow.com/questions/28440383/django-markdown-editor-does-not-show-up