在Django上传文件(不工作)

时间:2016-07-31 07:21:25

标签: django file-upload

我在这里创建一个包含线程的公告。每个线程包含一个图像,然后可以使用帖子扩展线程。 这就像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')

我已经在这几个小时了,现在检查我可能错过的任何事情。

1 个答案:

答案 0 :(得分:1)

老实说,我不知道你想做什么。但当我看到那个回购时,那个洞的东西搞砸了。我有几个问题要问你......

  1. 为什么你没有__init__.py? (孔回购没有,不好)

      

    最佳实践:   放置 init .py文件,并使用from module import something

    调用该模块
  2. 为什么你没有action属性?

      

    您有url={% ...},但您应该action={%...}