【发布时间】:2021-08-23 02:15:44
【问题描述】:
我在大学管理系统项目中遇到问题。我试图在我的项目中添加作业提交功能。当学生点击教师创建的作业时,它会引导他进入一个页面,该页面是:作业提交页面,或者如果他已经提交了该作业,则更新或仅显示相关信息。
项目的urls.py文件
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('cmsapp.urls')),
]
urlpatterns+= static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
用于 cmsapp 的 urls.py。
urlpatterns = [...
path('studentattendancereport', studentviews.student_attendance_report, name='studentattendancereport'),
path('fetchstudentattendance', studentviews.fetch_student_attendance, name='fetchstudentattendance'),
path('applyforleavestudent', studentviews.applyforleave, name='applyforleavestudent'),
path('marksreportstudent', studentviews.marksreportstudent, name='marksreportstudent'),
path('assignment', studentviews.assignments, name='assignment'),
path('assignmentupload/<int:id>', studentviews.assignment_upload, name='assignmentupload'),
]
views.py
def assignments(request):
subject = Subject.objects.filter(course=Student.objects.get(admin=request.user.id).course)
assignments = []
for s in subject:
for a in Assignment.objects.filter(subject_id=s.id):
assignments.append(a)
context = {'assignments': assignments}
return render(request, 'cmsapp/student/assignments.html', context)
def assignment_upload(request, id):
if request.method == 'POST':
student_id = Student.objects.get(admin=request.user.id)
assignment = Assignment.objects.get(id=id)
assignment_file = request.FILES['assignment']
try:
Student_Assignment.objects.create(assignment_id=assignment, student_id=student_id, document=assignment_file)
messages.success(request, 'Assignment is submited successfully.')
return redirect('assignment')
except:
messages.error(request, 'There is some problem, Please try again later.')
return redirect('assignment')
else:
assignment = Assignment.objects.get(id=id)
student_id = Student.objects.get(admin=request.user.id)
assignment_report = Student_Assignment.objects.filter(assignment_id=assignment.id, student_id=student_id).first()
if assignment_report:
context = {'assignment':assignment, 'assignment_report':assignment_report, 'student_id':student_id}
return render(request, 'cmsapp/student/assignment_report.html', context)
else:
context = {'assignment':assignment, 'assignment_report':assignment_report, 'student_id':student_id}
return render(request, 'cmsapp/student/assignment_upload.html', context)
assignment.html
<div class="container">
<h3 class="heading">Assignments
</h3>
<table class="table table-hover table-bordered mt-4">
<tr class="bg-dark text-white"><th>ID</th><th>Title</th><th>Description</th><th>Subject</th><th>Session</th><th>Created_at</th><th>Updated_at</th></tr>
{% for a in assignments %}
<tr>
<td><a href="{% url 'assignmentupload' a.id %}">{{a.id}}</a></td>
<td><a href="{% url 'assignmentupload' a.id %}">{{a.title}}</a></td>
<td><a href="{% url 'assignmentupload' a.id %}">{{a.description}}</a></td>
<td><a href="{% url 'assignmentupload' a.id %}">{{a.subject_id}}</a></td>
<td><a href="{% url 'assignmentupload' a.id %}">{{a.session_id}}</a></td>
<td><a href="{% url 'assignmentupload' a.id %}">{{a.created_at}}</a></td>
<td><a href="{% url 'assignmentupload' a.id %}"></a></td>
</tr>
{% endfor %}
</table>
</div>
assignment_upload.html
<div class="container">
<h3 class="heading">Assignment</h3>
<table class="table table-hover table-bordered text-capitalize">
<tr><th>Assignment Id</th><td>{{assignment.id}}</td></tr>
<tr><th>Title</th><td>{{assignment.title}}</td></tr>
<tr><th>Description</th><td>{{assignment.description}}</td></tr>
<form action="{% url 'assignmentupload' assignment.id %}" method="POST" class="form-group" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" placeholder="assignment" name="assignment" class="form-control mt-4">
<button class="btn btn-outline-success form-control mt-2">Submit</button>
</form>
</div>
assignment_report.html
<div class="container">
<h3 class="heading">Assignment</h3>
<table class="table table-hover table-bordered text-capitalize">
<tr><th>Assignment Id</th><td>{{assignment.id}}</td></tr>
<tr><th>Title</th><td>{{assignment.title}}</td></tr>
<tr><th>Description</th><td>{{assignment.description}}</td></tr>
<tr> <th>Your Assignment ID</th> <td>{{assignment_report.id}}</td></tr>
<tr> <th>Student ID</th> <td>{{assignment_report.student_id.id}}</td></tr>
<tr> <th>Document</th> <td>{{assignment_report.document}}</td></tr>
<tr> <th>Update</th> <td><form action="" method="POST" class="form-group" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" placeholder="assignment" name="assignment" class="form-control mt-1" style="width: 40%; display: inline;" accept=".pdf">
<button class="btn btn-outline-success btn-sm mt-2" style="display: inline; float: right; width: 20%;">Update</button>
</form></td></tr>
</table>
<a class="btn btn-outline-secondary btn-sm" href="{{assignment_report.document.url}}" open>Open</a>
<a class="btn btn-outline-info btn-sm" href="{{assignment_report.document.url}}" download>Download</a>
<p style="font-size: 12px; color: gray;">To Open or Download Assignment file click on buttons above.</p>
</div>
base.html
<div style="height: 120%; min-height: 96vh; display: flex; flex-wrap: wrap; align-content: stretch;">
<div class="container d-flex align-content-stretch flex-wrap float-left"
style="width: 15%;float: left; background-color: black;">
<nav class="nav nav-pills flex-column">
{% with request.resolver_match.url_name as url_name %}
<a class="nav-item nav-link nav-fill {% if url_name == 'studentdashboard'%}active{% endif %}"
href="{% url 'studentdashboard' %}">Dashboard</a>
<a class="nav-item nav-link subject {% if url_name == 'studentattendancereport'%}active{% endif %}"
href="#">Subjects</a>
{% for s in subject %}
<a class="nav-item nav-link d-none subject-token border border-dark {% if url_name == 'studentattendancereport'%}active{% endif %}"
href="#">{{s}}</a>
{% endfor %}
<a class=" nav-item nav-link {% if url_name == 'studentattendanceview'%}active{% endif %}"
href="studentattendancereport">Attendance</a>
<a class="nav-item nav-link {% if url_name == 'studentattendanceview'%}active{% endif %}"
href="marksreportstudent">Marks</a>
<a class="nav-item nav-link {% if url_name == 'assignment' or url_name == 'assignmentupload' %}active{% endif %}"
href="assignment">Assignment</a>
<a class="nav-item nav-link {% if url_name == 'applyforleave'%}active{% endif %}"
href="applyforleavestudent">Leave</a>
<a class="nav-item nav-link" href="#">Feedback</a>
{% endwith %}
<a class="nav-item nav-link" id="logout" href="{% url 'logout' %}">Log Out</a>
</nav>
</div>
<div style="background-color: white; width: 85%; float: right; height: 100%;">
{% if messages %}
<div class="messages container mt-2">
{% for message in messages %}
<div{% if message.tags %}
class="alert text-capitalize alert-{% if message.tags == 'error' %}danger{% else %}success{%endif%}"
{% endif %}>{{ message }}
</div>
{% endfor %}
</div>
{% endif %}
<div style="width: 100%;margin-top: 5px;">
{% block content %}
{% endblock %}
</div>
</div>
</div>
我有类似类型的 url 用于更新学生详细信息,它不会抛出这样的错误 url。
【问题讨论】:
-
请分享主 urls 文件,哪个视图/模板有问题?
-
我不知道问题出在哪里,但问题是这样的,当我进入 assignment_upload 视图时,浏览器 url 中的 url 变为 preurl/assignment_upload/id_of_assignment 之后当我点击在其他链接上,而不是转到该链接,但在浏览器 url 中显示 preurl/assignment_upload/link_that_i_click_on 但是它应该是 preurl/link_that_i_click_on,我在应用程序 urls.py 文件上方添加了项目主 urls.py
-
我没听懂你的意思,你要准确,所以我们任何人都可以提供帮助。
-
先生,我认为问题出在 assignment_upload 视图以及模板 assignment_report.html 和 assignment_upload.html,对不起先生,我无法说出确切的情况,我是新手,所以我不知道确切的术语。
-
当我在 assignment_upload 视图中时,浏览器显示的 url 像 127.0.0.1:8000/assignmentupload/1 1 在这里是 assignment id ,当我从这里点击链接 applyforleavestudent 时,该链接位于 base.html 中,该链接由 assignment_report 扩展。 html 比它去127.0.0.1:8000/assignmentupload/applyforleavestudent 但它应该去 url 127.0.0.1:8000/applyforleavestudent
标签: python django django-views django-urls