【问题标题】: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当我在 url ...abc/pqr 并单击 xyz 时,django url 出现问题,而不是到达 ...xyz 但 ...abc/xyz
【发布时间】: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


【解决方案1】:

在你的base.html

当您为&lt;a&gt; 标签设置href 时,请确保它是

href="{% url 'some-url-name' %}"

例如,你写了什么

href="studentattendancereport"

这只会将其附加到您当前的网址

你必须正确

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的信息

【讨论】:

  • 非常感谢先生。现在它正在工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 2023-04-10
  • 2016-07-28
  • 1970-01-01
相关资源
最近更新 更多