Django 页面无法呈现 - views.py url 路径中的错误

Posted

技术标签:

【中文标题】Django 页面无法呈现 - views.py url 路径中的错误【英文标题】:Django page failing to render - error in views.py url path 【发布时间】:2017-12-22 20:27:57 【问题描述】:

views.py 文件中出现错误,因此无法加载页面。

music/views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import Album

# Create your views here.

#each URL is connected to a view or an Http Response

def index(request):
    all_albums = Album.objects.all()
    html = ' '
    for album in all_albums:
        url= '/music/' + str(album_id) + '/'
        html +='<a href="' + url + '">'+album.album_title+'</a><br>'
    return HttpResponse(html)

def detail(request,album_id):
    return HttpResponse("<h2>Details for Album id:" + str(album_id) + "</h2>")

导致错误的行大概是:

url= '/music/' + str(album_id) + '/'

实际(页面)错误是:

NameError at /music/
name 'album_id' is not defined
Request Method: GET
Request URL:    http://127.0.0.1:8000/music/
Django Version: 2.0
Exception Type: NameError
Exception Value:    
name 'album_id' is not defined
Exception Location: C:\Users\User\Desktop\website\music\views.py in index, line 13
Python Executable:  C:\Python34\python.exe
Python Version: 3.4.3
Python Path:    
['C:\\Users\\User\\Desktop\\website',

在单独的测试中,album_id 似乎确实是“可访问的”

http://127.0.0.1:8000/music/1/

会正确加载页面(相册id号显示在页面上)。

错误指向上面的代码,但我看不到如何修复它。按照新波士顿教程,我用谷歌搜索看看是否有 Django 2.0 修复无济于事

总结一下:

http://127.0.0.1:8000/music/ 是行不通的。

http://127.0.0.1:8000/music/1 或 http://127.0.0.1:8000/music/3 在生成专辑 ID 时显示正常。

更新

同时发布 urls.py

from django.contrib import admin
from django.urls import include, path

from . import views #the dot means look at the current directory - look for a module called views

urlpatterns = [
    #this is matching /music/
     path('', views.index, name='index'),
     path("<album_id>/", views.detail, name="detail")

]

【问题讨论】:

您能否发布您的 urls.py 代码,以便我们查看 urlpatterns 是如何设置的 查看更新。谢谢 【参考方案1】:
def index(request):
    all_albums = Album.objects.all()
    html = ' '
    for album in all_albums:
        url= '/music/' + str(album_id) + '/'

您在使用之前还没有定义album_id

你在循环中for album in all_albums:,所以如果你想要专辑ID,请使用album.id

你通常不会像那样在视图中构建字符串。希望您的教程稍后会继续渲染模板。

【讨论】:

我有这个用于渲染,但由于某种缩进错误而无法继续前进 - 但我看不到什么! 请不要在 cmets 中发布代码。很难阅读,也无法看到缩进。如果您有缩进错误,请确保您的代码仅包含空格并且没有任何制表符。与我之前的评论类似,您不会在实践中编写这样的代码,而是使用render 快捷方式。

以上是关于Django 页面无法呈现 - views.py url 路径中的错误的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何通过views.py更改值

Django视图如何决定渲染/显示哪个html页面?

django/ajax:无法在 views.py 中获取 Ajax 发布数据

为啥我的 django 模板无法识别我在 views.py 文件中设置的 url 参数?

Django 使用 CSRF 令牌向 views.py 发送 POST 请求,然后重定向页面

当 Django views.py 没有将字典值传递给 html 时如何解决?