当我在 url 时在 django url 中遇到问题 ...abc/pqr 我点击 xyz 而不是到达 ...xyz 但是 ...abc/xyz

Getting a problem in django url when I am at url ...abc/pqr and I click on xyz than It is not getting to the ...xyz but ...abc/xyz

我的大学管理系统项目出现问题。我试图在我的项目中添加作业提交功能。其中,当学生点击老师创建的作业时,他将进入一个页面,该页面是:提交作业页面,或者如果他已经提交了该作业,则更新或仅显示相关信息。

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 for 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。

在你的base.html

当您为 <a> 标签设置 href 时,请确保它是

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' %}"

您可以参考here了解更多django's url template tag