Django无法正确处理get请求,因为项目的主urls.py中存在错误配置



我有一个使用Django编写的网站,这是一个非常基本的CMS。目前,我试图实现的功能是,当网络用户输入他们伪造的12位chukee cheese会员卡号时,Django应该编辑前8位数字,并将其返回给用户。所有这些都发生在带有博客文章文本内容的主登录页上。

以下是在我的项目的父urls.py:中声明的urlspatterns变量

urlpatterns = [
path('admin/', admin.site.urls),
path('', include('redactors.urls')),
path('', include('posts.urls')),   
path('', include('counters.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

有了这个确切的url,结果就是这样。如图所示,当网络用户输入其会员卡号时,在右侧的网页上,卡号(绿色标题元素下方(会按预期进行渲染和处理(位于该网址http://127.0.0.1:8000/?ccEntry=111111111111。问题是登录页(如http://127.0.0.1:8000/左侧所示(会渲染缺少博客文章内容的模板。

一种解决方案是交换path('', include('redactors.urls')),path('', include('posts.urls')),在urlpatters列表中出现的顺序。有了这种变化,结果就是这样。正如你在第二张图中看到的,博客文章的内容在输入卡号和不输入卡号的情况下都会呈现出来,但在绿色标题元素下方,它不会在右侧的网页中处理,它只是空白的。我期待看到:"xxxx-xxxx-1111"。

我的问题是:如何处理ccEntryget请求,以便在用户登录主页时呈现博客文章内容文本,在web用户输入其12位卡号时呈现博客内容文本

同样值得注意的是,我没有得到追踪,我的服务器也没有崩溃,所以在谷歌上搜索其他解决类似或相关问题的开发人员方面,我没有太多线索。

以下是正在播放的视图、模板和urls.py。

主要项目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('redactors.urls')),
path('', include('posts.urls')),   
path('', include('counters.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

注意path('', include('redactors.urls')),path('', include('posts.urls')),的定位当我处于这两个位置时,我得到了不同的结果,但仍然没有达到我的目标(如上所述(。

密文。视图

from django.shortcuts import render
from posts.models import Posts

def home(request):
if 'ccEntry' in request.GET:
number = request.GET['ccEntry']
redacted_num = 'xxxx xxxx {}'.format(number[-4:])
posts = Posts.objects.all().order_by('-pub_date')
# context = {'posts':posts}
return render(request, 'alls/landings.html', {'number':number, 'redacted_num':redacted_num, 'posts':posts, })
else:
return render(request, 'alls/landings.html')

帖子。视图

from django.shortcuts import redirect, render, get_object_or_404
from posts.models import Posts
def posts(request):
posts = Posts.objects.all().order_by('-pub_date')
context = {'posts':posts}
return render(request, 'alls/landings.html', context)

templates/alls.html:


<div class="card-processor">

<h3>Enter your fake Chuckee Cheese Neptune membership card number!</h3>

<form action="{% url 'home' %}" method="get">

<div> 
<label for="password">Enter Card Number:</label>
<input type="text" id="password" name="ccEntry" pattern="[0-9]{12}" maxlength="12"/>
<div class="requirements">Must be a 12 digit number and no letters. </div>
<input type="submit" value="Redact!" class="button"/>
</div>

</form>

<h1>Here is your fake Chuckee Cheese Neptune membership card number!</h1>
<h3 style="color:lime">This was the original number that you entered:</h3>
<div class="field">{{ number }}</div>
<h3 style="color:lime">Here it is redacted:</h3>
<div class="field">{{ redacted_num }}</div>    
<a href="{% url 'posts' %}"><div class="field"><strong>Again? Click here!</strong></div></a>

</div> <!--- END card-processor -->

<div class="post-content">
{% for post in posts %}
<h1> Blog post title: <em>{{ post.title }}</strong></em>
<h4>Publication Date: {{ post.pub_date_preference }}</h4>
<img src="{{ post.image.url }}" class="authors-pic" />

<!-- Body text should go here :   -->

<p>{{ post.body|safe }}</p>

{% endfor %}

我认为以上三个文件就是我的问题所在。但如果你需要浏览我的其他项目文件,这里有一个GitHub上完整源代码回购的静态快照(标记为v0.9.0(。

奇怪:不久前,我将redactors分支合并到master中。有两个小的合并冲突。

我的编校器应用程序的urls.py中的urlpatterns列表变量过去看起来像这样:

urlpatterns = [
path('', views.home, name='home'),
]

基本上,当我把"home"传递给第一个路径参数时,如下所示:

urlpatterns = [
path('home', views.home, name='home'),
]

一切似乎都按计划进行。无论是否有表单输入,博客文章内容都会出现,post请求也会按预期进行处理。好极了

最新更新