django - urls.py 根路径集
django - urls.py root path set
当我输入 localhost:8000
或 localhost:8000/store
时,两个视图都与 home/index.html
相同。
我希望这些路径设置不同的视图。
urls.py
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'', 'home.views.index', name='view_home'),
url(r'^admin/', admin.site.urls),
url(r'^store/$', 'store.views.store_list', name='view_store_list'),
url(r'^store/(?P<store_id>\d+)$', 'store.views.single_store')
]
views.py - 家
from django.shortcuts import render
def index(request):
return render(
request,
'index.html'
)
views.py - 商店
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Store # fetch Store model
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # paginate
def store_list(request):
store_list = Store.objects.all()
paginator = Paginator(store_list, 2)
page = request.GET.get('page')
try:
stores = paginator.page(page)
except PageNotAnInteger:
stores = paginator.page(1)
except EmptyPage:
stores = paginator.page(paginator.num_pages)
return render(
request,
'index.html',
{
'stores': stores,
}
)
干杯!
编辑:
我也试过url(r'^$', 'home.views.index', name='view_home'),
,但结果是一样的。
您需要锚定和终止根视图的模式:
url(r'^$', 'home.views.index', name='view_home'),
您在
中有一个尾部斜杠“/”
url(r'^store/$', 'store.views.store_list', name='view_store_list')
因此它对 url localhost:8000/store/
有效,但对 url localhost:8000/store
无效。所以你需要删除尾部斜杠。
此外,@Daniel 是对的,您需要像他在回答中提到的那样放置家 URL。尾部斜杠是您在更改主页后无法使其工作的原因 URL。
第一个问题,大牛提到的是url模式,如果你只设置空字符串,它总是匹配。因此你应该使用 url(r'^$', 'home.views.index', name='view_home')
。使用 r'^$'
你是说模式只与空字符串匹配。或者,您可以将此 url 移动到列表的末尾,如果其他匹配,它将用作默认视图。
我看到的第二个问题是,在您的 store_list
视图中,您返回的是:
return render(
request,
'index.html',
{
'stores': stores,
}
)
您是否对索引和存储使用了相同的模板 index.html
,还是只是复制和粘贴错误?如果是这样,您确定 stores
变量包含数据吗?如果您没有任何结果,结果将与索引视图相同。
我认为您的模板名称相互冲突。您可以像这样为整个项目创建一个模板文件夹
Project
|>Templates
|>store
|>home
在模板中,您可以像这样放置模板
Project
|>Templates
store
|>index.html
home
|>index.html
|store
|home
现在您可以像这样给出模板的路径
def index(request):
return render(
request,
'home/index.html'
)
如果您想将模板保存在应用程序下的目录中,那么 this issue 可能会对您有所帮助。
当我输入 localhost:8000
或 localhost:8000/store
时,两个视图都与 home/index.html
相同。
我希望这些路径设置不同的视图。
urls.py
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'', 'home.views.index', name='view_home'),
url(r'^admin/', admin.site.urls),
url(r'^store/$', 'store.views.store_list', name='view_store_list'),
url(r'^store/(?P<store_id>\d+)$', 'store.views.single_store')
]
views.py - 家
from django.shortcuts import render
def index(request):
return render(
request,
'index.html'
)
views.py - 商店
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Store # fetch Store model
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # paginate
def store_list(request):
store_list = Store.objects.all()
paginator = Paginator(store_list, 2)
page = request.GET.get('page')
try:
stores = paginator.page(page)
except PageNotAnInteger:
stores = paginator.page(1)
except EmptyPage:
stores = paginator.page(paginator.num_pages)
return render(
request,
'index.html',
{
'stores': stores,
}
)
干杯!
编辑:
我也试过url(r'^$', 'home.views.index', name='view_home'),
,但结果是一样的。
您需要锚定和终止根视图的模式:
url(r'^$', 'home.views.index', name='view_home'),
您在
中有一个尾部斜杠“/”url(r'^store/$', 'store.views.store_list', name='view_store_list')
因此它对 url localhost:8000/store/
有效,但对 url localhost:8000/store
无效。所以你需要删除尾部斜杠。
此外,@Daniel 是对的,您需要像他在回答中提到的那样放置家 URL。尾部斜杠是您在更改主页后无法使其工作的原因 URL。
第一个问题,大牛提到的是url模式,如果你只设置空字符串,它总是匹配。因此你应该使用 url(r'^$', 'home.views.index', name='view_home')
。使用 r'^$'
你是说模式只与空字符串匹配。或者,您可以将此 url 移动到列表的末尾,如果其他匹配,它将用作默认视图。
我看到的第二个问题是,在您的 store_list
视图中,您返回的是:
return render(
request,
'index.html',
{
'stores': stores,
}
)
您是否对索引和存储使用了相同的模板 index.html
,还是只是复制和粘贴错误?如果是这样,您确定 stores
变量包含数据吗?如果您没有任何结果,结果将与索引视图相同。
我认为您的模板名称相互冲突。您可以像这样为整个项目创建一个模板文件夹
Project
|>Templates
|>store
|>home
在模板中,您可以像这样放置模板
Project
|>Templates
store
|>index.html
home
|>index.html
|store
|home
现在您可以像这样给出模板的路径
def index(request):
return render(
request,
'home/index.html'
)
如果您想将模板保存在应用程序下的目录中,那么 this issue 可能会对您有所帮助。