#python #django #django-views #django-urls
Вопрос:
У меня возникает проблема в моем проекте системы управления колледжем. Я попытался добавить функцию отправки заданий в свой проект. В котором, когда ученик нажимает на задание, созданное учителем, оно приведет его на страницу, которая является : либо страницей отправки задания, либо, если он уже отправил это задание, обновите или только отобразите информацию об этом.
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)
urls.py для cmsapp.
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-адрес.
Комментарии:
1. Пожалуйста, поделитесь основным файлом URL-адресов и в каком представлении/шаблоне есть проблема?
2. Я не знаю, где возникает проблема, но проблема в чем-то подобном, когда я прихожу в представление assignment_upload и чем url-адрес в браузере url-адрес становится предварительным/assignment_upload/id_of_assignment, и после этого, когда я нажимаю на какую-то другую ссылку, чем она не переходит по этой ссылке, но в URL-адресе браузера отображается предварительный/assignment_upload/link_that_i_click_on, однако это должно быть предварительно/link_that_i_click_on, я добавил основные проекты urls.py над приложением urls.py файл
3. Я вас не понимаю, будьте точны, чтобы любой из нас мог помочь.
4. Сэр, я думаю, что проблема в представлении assignment_upload и шаблоне assignment_report.html и assignment_upload.html, Извините, сэр, за то, что я не могу сказать точную ситуацию, я новичок, поэтому я не знаю точной терминологии.
5. когда я в assignment_upload посмотреть, чем браузер показать URL-адрес 127.0.0.1:8000/assignmentupload/1 1 здесь присвоения идентификатора , и когда я нажимаю отсюда на ссылку applyforleavestudent который в base.html срок действия которого продлен с assignment_report.html чем пойдешь к 127.0.0.1:8000/assignmentupload/applyforleavestudent но он должен сделать, чтобы URL-адрес 127.0.0.1:8000/applyforleavestudent
Ответ №1:
В вашем base.html
Когда вы устанавливаете href
свои <a>
теги, убедитесь, что это
href="{% url 'some-url-name' %}"
Например, то, что вы написали
href="studentattendancereport"
это просто добавит это к вашему текущему URL-адресу
Вы должны сделать это правильно для
href="studentattendancereport" ---> href="{% url 'studentattendancereport' %}"
href="marksreportstudent" ---> href="{% url 'marksreportstudent' %}"
href="assignment" ---> href="{% url 'assignment' %}"
href="applyforleavestudent" ---> href="{% url 'applyforleavestudent' %}"
Вы можете обратиться сюда, чтобы узнать больше о django's url template tag
Комментарии:
1. большое вам спасибо, сэр. теперь это работает.