django - Django编辑视图不显示
问题描述
我是 Django 的新手。
我的应用程序允许用户project
通过提供标题和正文内容来创建、删除和更新它。
现在,我正在为我的应用程序创建和编辑/更新视图,但它没有显示在我的 html 页面中。
网址.py
from django.urls import path, include
from . import views
urlpatterns = [
path('allprojects', views.allprojects, name='allprojects'),
path('createproject', views.createproject, name='createproject'),
path('<int:project_id>', views.projectdetail, name='projectdetail'),
path('<int:project_id>/editproject', views.editproject, name='editproject'),
]
项目/views.py
@login_required
def editproject(request, project_id):
if request.method == 'POST':
if request.POST['title'] and request.POST['content']:
project = get_object_or_404(Project, pk=project_id)
project.title = request.POST['title']
project.content = request.POST['content']
project.developer = request.user
project.save()
return redirect('/projects/' + str(project.id))
else:
return render(request, 'projects/editproject.html', {'error':'All fields are required.'})
else:
return render(request, 'projects/allprojects.html')
项目/模板/项目/editproject.html
{% extends 'base.html' %}
{% block title %}Edit Project{% endblock %}
{% block content %}
<div class="container">
<div class="row">
<div class="mt-4 offset-md-3 col-md-6">
<h2>Create a new project</h2>
<form method="post">
{% csrf_token %}
<div class="form-group">
<label for="exampleFormControlTextarea1">Title of the project</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="1" name="title"></textarea>
</div>
<div class="form-group">
<label for="exampleFormControlTextarea1">Brief description of this project</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="5" name="content"></textarea>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
{% endblock %}
问题
当我转到诸如http://localhost:8000/projects/2/editproject
没有我想要的更新表单之类的 url 时,该页面存在但它不包含任何内容
解决方案
您必须project = get_object_or_404(Project, pk=project_id)
在字典中传递 才能获取模板中的值。
像这样改变你的观点:
@login_required
def editproject(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == 'POST':
if request.POST['title'] and request.POST['content']:
project.title = request.POST['title']
project.content = request.POST['content']
project.developer = request.user
project.save()
return redirect('/projects/',project.project_id)
return render(request, 'projects/editproject.html', {'error':'All fields are required.','project':project})
在template
你可以得到这样的价值:
同样在您的模板中更改method=put
为,如果您想更新,您method=post
还需要提供 。action
<div class="form-group">
<label for="exampleFormControlTextarea1">Title of the project</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="1" name="title">
{{project.title}}
</textarea>
</div>
推荐阅读
- sql-server - 无法与 sqlalchemy 连接
- android - 添加 Xamarin.Forms.Visual.Material nuget 后 XF Android 项目未构建
- java - Java 不读取葡萄牙语 txt
- python - python - 如何在文本文件中的某个字符串之后从python中的文本文件中提取数据?
- sql-server - 在水晶报表的参数中使用类似 SQL 的运算符
- python-imageio - imageio(Python)上的函数 imwrite 似乎正在重新缩放图像数据
- javascript - 实时更改中继器内的标签
- url - 获取 IndexPath for - UITextView 应与 indexPath 处的 URL 交互
- javascript - 如何从后端服务器获取 mapbox 访问令牌,而不是在模块导入语句中对其进行硬编码?
- javascript - Puppeteer 查询选择器 - 如何获得第二场比赛