Skip to main content
 首页 » 编程设计

python之无法获取要呈现的页面。 Django

2025年05月04日22fff_TT

这很奇怪。我知道 url 正在查找 View ,但它不会呈现页面/或任何内容...比如打印 HttpResponse。我迷失了故障排除。对我来说似乎一切都是相连的,但不知何故不是?如果您需要任何其他信息,请告诉我。

urls.py(项目)

from django.conf.urls import url, include 
from django.contrib import admin 
 
urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url('',         include('login_app.urls', namespace = "login_app")),     
    url(r'^CMIRS/', include('submit_app.urls', namespace = "submit_app")),   
] 

urls.py(提交应用)

from django.conf.urls import url 
from . import views 
 
urlpatterns = [ 
    url(r'submit/$', views.submit, name ="submitView"), 
] 

welcome.html(登录应用)

{% extends "base.html" %} 
{% block content %} 
{% load staticfiles %} <!-- static files have to be loaded inside block content --> 
<link rel="stylesheet" type="text/css" href="{% static 'login_app/css/welcome.css' %}" /> 
 
<div class="row"> 
    <a href="{% url 'submit_app:submitView' %}"> 
    <div class="col-sm-4 vcenter" style="text-align: center"> 
        <h1><i class="fa fa-pencil fa-3x"></i></h1> 
        <h3>Report an Incident</h3> 
        <p></p> 
    </div> 
    </a> 
</div> 
{% endblock %} 

views.py(提交应用)

from submit_app.forms import IncidentForm 
from django.shortcuts import render 
from django.contrib.auth.decorators import login_required 
from django.http import HttpResponse 
 
#@login_required(login_url='/login/') 
def submit(request): 
    print  ("made it") 
    template = 'submit_app/submit.html' 
    form = IncidentForm() 
    context = {'form': form} 
    #return render(request, template, context) 
    return HttpResponse("view is working") 

============================================= ==================== 这些都是在 #@login_required(login_url='/login/') 注释掉的情况下完成的。

请您参考如下方法:

在您的urls.py(项目)中,做一点改动,将'' 替换为r'^login/':

from django.conf.urls import url, include 
from django.contrib import admin 
 
urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^login/',  include('login_app.urls', namespace = "login_app")),     
    url(r'^CMIRS/', include('submit_app.urls', namespace = "submit_app")),   
] 

当您使用模式 '' 时,所有内容都将与此 url 匹配,您将永远无法访问所需的 View 。

如您所见,/CMIRS/ 和/CMIRS/submit/ 都定向到登录页面(welcome.html) .我猜您想在用户未登录或未输入正确的 URL 时重定向用户。尝试在 View 函数中进行重定向。

我查看了 Django 中 urlresovlers.py 的源代码,它使用 python 中的 re 模块来进行正则表达式匹配工作。这里我们可以试一试:

>>> import re 
>>> re.match('', 'abc') 
<_sre.SRE_Match object at 0x10bc46e68> 
>>>  

返回的匹配对象意味着 'abc' 被认为是 '' 的匹配项。因此,当您在 url 模式的开头放置一个 '' 时,所有内容都将与空字符串“匹配”,然后再传递给其他人。