【发布时间】:2016-05-02 15:16:30
【问题描述】:
我制作了一个“分页器”应用程序,为我的所有页面添加了此类 SEO 优化。 所以我需要通过 paginator.view 传递所有可见的页面 url 但是,我希望我的应用程序尽可能结构化。
例如,这里是我的画廊应用程序的视图:
gallery.views
from django.shortcuts import render
from gallery.models import GalleryItem
def home(request):
img_to_display = GalleryItem.objects.filter(published=True
).order_by('-date')
return render(request, 'gallery/all.html', locals())
...
现在我在分页器中的视图中这样做:
我当前的 paginator.views
from django.shortcuts import render, get_object_or_404, redirect
from gallery.models import GalleryItem
from paginator.models import Page
import gallery
def custom_page(request, url):
current_page = url
# just for the gallery page :
if url == 'gallery':
img_to_display = GalleryItem.objects.filter(published=True
).order_by('-date')
# for all my page
page_to_load = get_object_or_404(Page, name=url)
template_to_load = "paginator/" + page_to_load.template_name
return render(request, template_to_load, locals())
所以我复制/粘贴了我的视图和所有依赖项,但这真的很难看,而且根本不是 DRY,值得它不可维护。我尝试了类似的方法,但它不起作用:
paginator.views : option1
from django.shortcuts import render
import gallery
def custom_page(request, url):
if url == 'gallery':
gallery.views.home(request)
if url == 'anotherpage':
anotherapp.views.home(request)
...
或者类似的东西:
paginator.views : 选项 2
from django.shortcuts import render
def custom_page(request, url):
if url == 'gallery':
include("gallery.views.py")
if url == 'anotherpage':
include("anotherapp.views.py")
...
注意:我更喜欢最后一个样式选项,因为它会在 paginator.views 文件的开头最小化导入。
非常感谢您的帮助! :)
【问题讨论】:
-
你想从
paginator.custom_page触发gallery.home视图吗? -
是的,在某些方面,在选项 1 中。但即使我将所有“来自 ... 导入 ...”从我的 gallery.views 包含到我的分页器中,它也不起作用。视图:gallery.views.home(请求)。有没有办法使选项2有效?也许通过指定一个参数,比如: include("gallery.views.py", home()) ?
-
你在尝试重定向之类的东西吗?从
custom_page到gallery.home你需要什么? -
我所有的页面都有:名称、seo_title、seo_decription(等等)以及 txt_content 和模板链接...
-
我还不明白
custom_page视图有什么帮助。如果需要,您可以使用template_processor将变量传递给每个模板。
标签: django django-views