python - Django 2 - URL 路由问题
问题描述
我试图让我的索引页面在我的 Django 2 项目上打开,但我似乎无法让它从我的音乐应用程序(index.html)中的模板打开一个简单的页面。目前使用基于类的视图。
我的发布 URL 有效,但使用的是他的 re_path。我似乎根本无法正常工作。
我已经有一年没看这个项目了,而且我通常不会使用 Django,但我想重新开始。
网址.py
from django.contrib import admin
from django.urls import path, include, re_path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
# include urls from the music app
path('music/', include('music.urls')),
]
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
音乐/urls.py
from django.contrib import admin
from django.urls import path, include, re_path
from . import views
# defined the app name in case the same fields are used in other apps
app_name = 'music'
urlpatterns = [
# no info past music return index EG /music/
path('', views.IndexView.as_view(), name='index'),
re_path(r'^release/$', views.ReleaseView.as_view(), name='release'),
re_path(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name="detail"),
re_path(r'^(?P<pk>[0-9]+)/$', views.ArtistView.as_view(), name="artist"),
re_path(r'^register/$', views.UserFormView.as_view(), name="register"),
]
视图.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.views import generic
from django.views.generic import ListView, View
from .models import Artist, Track, Release
from .forms import UserForm
from urllib import request
class IndexView(View):
template_name = 'music/index.html'
# def get(self, request):
# return render(request, "music/index.html")
class ReleaseView(generic.ListView):
template_name = 'music/releaselist.html'
context_object_name = 'all_releases'
def get_queryset(self):
return Release.objects.all()
class ArtistView(generic.ListView):
model = Artist
template_name = 'music/base.html'
context_object_name = 'all_artists'
def get_queryset(self):
artist_name = Artist.objects.all()
return render(request, "music/base.html", {'artist_name': artist_name})
# return render(request, "music/base.html", {'artists': artists})
class DetailView(generic.DetailView):
model = Release
template_name = 'music/detail.html'
class UserFormView(View):
form_class = UserForm
template_name = 'music/registration_form.html'
# blank form
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
# cleaned normalised data
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.save()
# returns user objects if credential are valid
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return redirect('music:index')
return render(request, self.template_name, {'form': form})
我的 base.html 和 index.html 位于 recordlabel/music/templates
如果有人能发现任何对我有很大帮助的东西,因为我知道这是我没有做的愚蠢的事情。我已经尝试过 makemigrations 和迁移,并且该站点可以正常加载发布页面,并且数据和图像都可以正常加载。只是无法让索引页面正常工作,而且以前从未工作过。
如果有任何其他文件,请随时 ping 我,但我认为它在这些文件中的某个位置。我查看了文件顶部的文档以及官方文档,也无法从那里得到任何工作。
解决方案
你注册了music/
,但没有music/index/
。仅当name=
您需要通过类似{% url 'music:index' %}
.
仅供参考,127.0.0.1:8000/music
并且127.0.0.1:8000/music/
是不同的路线。
编辑
我知道这不是你问题的一部分,但这部分
re_path(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name="detail"),
re_path(r'^(?P<pk>[0-9]+)/$', views.ArtistView.as_view(), name="artist"),
可能容易出现错误。如果你有一个艺术家和一首同名的歌曲怎么办?比 Django 会有冲突的 URL,而且通常处理起来很烦人。song/
只需在(分别)或detail/
主键之前附加前缀即可。
推荐阅读
- iphone - 我可以更新特定用户的应用程序吗?
- android - 使用灵活空间模式(又名折叠工具栏)实现 Android 导航组件
- python - 检查目标时出错:预期 dense_2 有 2 个维度,但得到了形状为 (1, 1226, 2) 的数组
- python - Python While 循环在中断后更新一次代码......有时
- c - 如何在运行时将任何类型存储在 void* 中?
- python - 带有全局变量和局部变量声明的python错误,在声明后更改变量值
- javascript - 在不丢失附加事件侦听器的情况下修改 HTML 标记
- python - 文件 b'.csv' 不存在
- java - java中的偶数三角形
- firebase - Firebase 想向我收费,但我使用的是测试帐户