Django网页点击链接触发OS错误[Errno22],寻求问题排查解决
Django页面链接点击触发OS错误[Errno 22]的排查与解决
我用Django开发网页时,点击页面内链接触发OS错误:[Errno 22] Invalid argument: 'C:\Users\Lenovo\Desktop\django projects\env\Lib\site-packages\django\contrib\admin\templates\home\ran_num_gen.html',无法定位问题根源,需要解决。
相关代码与配置
views.py
from django.shortcuts import render from django.template.context import Context # Create your views here. def home(request): return render(request , 'home\\home.html' ) def num_guess_game(request): return render (request ,'home\\num_guess_game.html') def ran_num_gen(request): return render (request ,'home\\ran_num_gen.html') def ran_pwd_gen(request): return render (request ,'home\\ran_pwd_gen.html')
urls.py
""" URL configuration for core project. The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/4.2/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from home.views import * urlpatterns = [ path('admin/', admin.site.urls), path('', home ,name='home'), path('ran_num_gen/', ran_num_gen , name='ran_num_gen' ), path('ran_pwd_gen/', ran_pwd_gen ,name='ran_pwd_gen' ), path('num_guess_game/', num_guess_game , name='num_guess_game' ), ]
home.html
{% extends 'home\\base.html' %} {% block title %}Welcome to homepage{% endblock title %} {% block content %} <h1>welcome to ALL ABOUT RANDOM</h1> <p>i made this site to learn more about django</p> you can do the following things here : <hr> <li><a href="ran_num_gen/">Random number generator</a></li> <hr> <li><a href="ran_pwd_gen/">Random password generator</a></li> <hr> <li><a href="num_guess/">Random guess game</a></li> <hr> {% endblock content %}
我试过修改链接名称、添加HTML后缀,都没解决问题。
错误根源与解决方法
1. 修复模板路径的分隔符问题
Windows的反斜杠\在Python字符串中是转义字符,你用home\\home.html会导致Django解析路径异常,错误地去admin模板目录下查找文件。把所有模板路径里的\\替换为/:
修改views.py中的render路径:
def home(request): return render(request , 'home/home.html' ) def num_guess_game(request): return render (request ,'home/num_guess_game.html') def ran_num_gen(request): return render (request ,'home/ran_num_gen.html') def ran_pwd_gen(request): return render (request ,'home/ran_pwd_gen.html')
同时修改home.html的继承路径:
{% extends 'home/base.html' %}
2. 修正链接路径不匹配问题
home.html中第三个链接是num_guess/,但urls.py中对应的路径是num_guess_game/,点击会触发404,需要修正链接:
<li><a href="num_guess_game/">Random guess game</a></li>
3. 确认模板目录配置正确性
检查settings.py,确保你的home应用在INSTALLED_APPS中,且模板配置正确:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'home', # 必须添加该应用 ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], # 应用内模板目录无需额外配置,留空即可 'APP_DIRS': True, # 开启后Django会自动搜索应用内的templates目录 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
内容的提问来源于stack exchange,提问作者somesh
相关产品推荐
相关产品推荐

