Ich erstelle hier ein Bulletin mit Threads. Jeder Thread enthält ein Bild und dann kann der Thread mit Posts erweitert werden. Es ist wie 4chan.Datei hochladen in Django (funktioniert nicht)
Die Modelle werden nicht in der Datenbank gespeichert. Ich folgte diesem answer, um ein Datei-Upload-Beispiel zu erstellen.
Die Forum-App enthält ein einfaches Datei-Upload-Beispiel und die Upload-Objekte werden dort gespeichert.
Codebases (github)
Der Projektbaum
bookstore/
chan/
templates/chan/index.html
forms.py
admin.py
views.py
urls.py
forum/
...
bookstore/
settings.py
urls.py
Einstellungen
.
.
.
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'),
]
Ansichten
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')
Ich habe jetzt etwas Überprüfung stundenlang auf diese, die ich verpasst haben könnte.
Irgendwie habe ich das __init__ unter gitignore links. –
Das ist total ein dummer Fehler. Ich habe diese URL mit einer weiteren kleinen Änderung an der Aktion angepasst und es hat funktioniert. –
Kann nicht sehen, wie ich das übersehen habe. –