Python 未通过模板更新视图在Django中存储和获取图像文件
views.py:Python 未通过模板更新视图在Django中存储和获取图像文件,python,django,django-models,django-forms,django-templates,Python,Django,Django Models,Django Forms,Django Templates,views.py: from django.shortcuts import render, redirect from django.http import HttpResponse, JsonResponse from .models import Project, Task from .forms import ProjectForm, TaskForm from django.views.generic import (TemplateView,ListView,DetailView,C
from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse
from .models import Project, Task
from .forms import ProjectForm, TaskForm
from django.views.generic import (TemplateView,ListView,DetailView,CreateView,UpdateView,DeleteView)
# Create your views here.
def index(request):
projects = Project.objects.all()
print("projects: ", projects)
form = ProjectForm()
if request.method == 'POST':
form = ProjectForm(request.POST)
if form.is_valid():
form.save()
else:
print(form.errors)
return redirect('/')
context = {'projects': projects, 'form': form}
return render(request, 'projects/list_project.html', context)
class ProjectDetailView(DetailView):
model = Project
def updateProject(request, pk):
project_inst = Project.objects.get(id=pk)
form = ProjectForm(instance=project_inst)
if request.method == 'POST':
form = ProjectForm(request.POST, instance=project_inst)
if form.is_valid():
form.save()
return redirect('/')
context = {'form': form}
return render(request, 'projects/update_project.html', context)
models.py
from django.db import models
from django.utils import timezone
from django.urls import reverse
from django.conf import settings
# Create your models here.
def upload_project_image(instance, filename):
return "todoapp/files/{filename}".format(filename=filename)
class Project(models.Model):
title = models.CharField(max_length=200, unique=True)
description = models.TextField(null=True, blank=True)
image = models.ImageField(upload_to=upload_project_image, null=True, blank=True)
duration = models.DurationField(null=True, blank=True)
created_date = models.DateTimeField(auto_now_add=True)
def get_absolute_url(self):
return reverse("project_detail",kwargs={'pk':self.pk})
def __str__(self):
return self.title
class Task(models.Model):
STATUS= (
('New', 'New'),
('Assigned', 'Assigned'),
('Selected For Development', 'Selected For Development'),
('In Progress', 'In Progress'),
('Blocked', 'Blocked'),
('Completed', 'Completed'),
)
title = models.CharField(max_length=200)
description = models.TextField()
project = models.ForeignKey(Project, related_name='tasks', on_delete=models.CASCADE)
created_date = models.DateTimeField(default=timezone.now)
current_status = models.CharField(max_length=50, choices=STATUS, default='New')
def get_absolute_url(self):
return reverse("project_detail",kwargs={'pk':self.pk})
def __str__(self):
return self.title
settings.py:
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'), )
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
STATIC_URL = '/static/'
project_detail.html
<!DOCTYPE html>
<html>
<head>
<title>Project Detail</title>
</head>
<body>
Project Title: {{project.title}} <br>
Project Description: {{project.description}} <br>
Project Image: {{project.image.url}}
Project Duration: {{project.duration}} <br>
Project Created Date: {{project.created_date}} <br>
<h4>Tasks:</h4>
{% for task in project.tasks.all %}
Task Title: {{task.title}} <br>
Task Description: {{task.description}} <br>
Task Current Status: {{task.current_status}} <br>
Task Created Date: {{task.created_date}} <br> <br>
{% endfor %}
</body>
</html>
项目细节
项目名称:{{Project.Title}}
项目描述:{{Project.Description}}
项目映像:{{Project.Image.url}
项目工期:{{Project.Duration}}
项目创建日期:{{Project.Created_Date}}
任务:
{project.tasks.all%中的任务的%s}
任务标题:{{Task.Title}}
任务描述:{{Task.Description}}
任务当前状态:{{Task.Current_Status}}
任务创建日期:{{Task.Created_Date}}
{%endfor%}
更新_project.html
<h3>Update Project</h3>
<form method="POST" action="" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit" name="Update Project">
</form>
<!DOCTYPE html>
<html>
<head>
<title>List View of Projects</title>
</head>
<body>
<h2>To Do</h2>
<form method="POST" action="/" enctype="multipart/form-data">
{{form.title}}
{% csrf_token %}
<input type="submit" name="Create Task">
</form>
{% for project in projects %}
<div>
<a href="{% url 'update_project' project.id %}">Update</a>
<a href="{% url 'delete_project' project.id %}">Delete</a>
<p>{{project.title}}</p>
</div>
{% endfor %}
</body>
</html>
更新项目
{%csrf_令牌%}
{{form.as_p}}
list_project.html
<h3>Update Project</h3>
<form method="POST" action="" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit" name="Update Project">
</form>
<!DOCTYPE html>
<html>
<head>
<title>List View of Projects</title>
</head>
<body>
<h2>To Do</h2>
<form method="POST" action="/" enctype="multipart/form-data">
{{form.title}}
{% csrf_token %}
<input type="submit" name="Create Task">
</form>
{% for project in projects %}
<div>
<a href="{% url 'update_project' project.id %}">Update</a>
<a href="{% url 'delete_project' project.id %}">Delete</a>
<p>{{project.title}}</p>
</div>
{% endfor %}
</body>
</html>
项目列表视图
做
{{form.title}
{%csrf_令牌%}
{项目%中的项目为%}
{{project.title}
{%endfor%}
URL.py:
from django.urls import path
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('', views.index, name='project_list_view'),
path('update_project/<str:pk>/', views.updateProject, name='update_project'),
path('delete_project/<str:pk>/', views.deleteProject, name='delete_project'),
path('project_detail/<str:pk>/', views.ProjectDetailView.as_view(), name='project_detail')
]
# urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += staticfiles_urlpatterns()
从django.url导入路径
从…起导入视图
从django.contrib.staticfiles.url导入staticfiles\u urlpatterns
从django.conf.url.static导入静态
从django.conf导入设置
URL模式=[
路径(“”,views.index,name='project\u list\u view'),
路径('update\u project/',views.updateProject,name='update\u project'),
路径('delete_project/',views.delete project,name='delete_project'),
路径('project\u detail/',views.ProjectDetailView.as\u view(),name='project\u detail')
]
#urlpatterns=urlpatterns+static(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
如果设置为.DEBUG:
urlpatterns+=静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
urlpatterns+=静态文件\u urlpatterns()
我对图像比较新。在尝试在更新图像
屏幕中上载图像时,我正在从设备中选择一个文件,但我既没有收到错误,也没有收到按照models.py中的路径存储在文件夹中的图像
有人能帮我吗