我在这里创建一个包含线程的公告。每个线程包含一个图像,然后可以使用帖子扩展线程。 这就像4chan。
模型未保存在数据库中。我按照此answer创建了一个文件上传示例。
论坛应用包含一个简单的文件上传示例,上传对象会保存在那里。
代码库(github)
项目树
bookstore/
chan/
templates/chan/index.html
forms.py
admin.py
views.py
urls.py
forum/
...
bookstore/
settings.py
urls.py
设置
.
.
.
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Urls.py
from django.conf.urls import url, include
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^create_post/(?P<thread_id>[0-9]+)/$', views.create_post, name='create_post'),
url(r'^create_thread/$', views.create_thread, name='create_thread'),
]
视图
from django.shortcuts import render, redirect
from . import models
from . import forms
def index(request):
threads = models.Thread.objects.all()
thread_form = forms.Thread()
post_form = forms.Post()
return render(request, 'chan/index.html',{
'threads':threads,
'thread_form':thread_form,
'post_form':post_form,
})
def create_post(request, thread_id):
form = forms.Post(request.POST, request.FILES)
if form.is_valid():
post = Post(
text=request.POST['text'],
document=request.FILES['document'],
thread=models.Thread.get(pk=thread_id),
)
post.save()
return redirect('chan:index')
def create_thread(request):
form = forms.Thread(request.POST, request.FILES)
if form.is_valid():
thread = Thread(
text=request.POST['text'],
document=request.FILES['document']
)
thread.save()
return redirect('chan:index')
我已经在这几个小时了,现在检查我可能错过的任何事情。
答案 0 :(得分:1)
老实说,我不知道你想做什么。但当我看到那个回购时,那个洞的东西搞砸了。我有几个问题要问你......
为什么你没有__init__.py
? (孔回购没有,不好)
最佳实践: 放置 init .py文件,并使用
调用该模块from module import something
为什么你没有action
属性?
您有
url={% ...}
,但您应该action={%...}