2016-07-31 107 views
0

我在這裏創建了一個公告,其中包含線程。每個線程包含一個圖像,然後可以使用帖子擴展線程。 這就像4chan。在Django中上傳文件(不工作)

模型未保存在數據庫中。我按照這個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

老實說,我不知道你在做什麼。但是當我考慮這個回購時,洞裏的東西就搞砸了。我有幾個問題給你...

  1. 爲什麼你沒有__init__.py? (孔回購沒有,不好)

    最佳實踐: 廣場初始化 .py文件並調用與from module import something

  2. 模塊爲什麼你沒有action屬性?

    你有url={% ...}但你應該有action={%...}

+0

不知怎的,我離開了那__init__下gitignore。 –

+0

這完全是一個愚蠢的錯誤。我修復了這個URL,以便進行另一次小改動,並且工作正常。 –

+0

看不到我是如何忽略這一點的。 –