如何编写单个视图函数以从不同的URL路径呈现多个HTML?

时间:2018-08-24 11:25:35

标签: django python-3.x django-views

我试图避免自我应对视图功能,但不知道该怎么做。 我的观点略有不同,绝对有办法 在这种情况下,使用单个功能呈现html页面。我尝试了网址“名称”值,但失败了。我只是从django开始,希望有经验的程序员能找到解决方案。谢谢您的帮助。

urls.py

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', views.index, name='index'),
        path('about/', views.about, name='about'),
        path('team/', views.team, name='team'),
        path('contacts/', views.contacts, name='contacts'),
        path('researches/', views.researches, name='researches'),
        path('publications/', views.publications, name='publications'),
    ]

views.py

def index(request):
    return render(request, 'website/index.html')

def about(request):
    return render(request, 'website/about.html')

def team(request):
    return render(request, 'website/team.html')

def publications(request):
    return render(request, 'website/publications.html')

def researches(request):
    return render(request, 'website/researches.html')

def contacts(request):
    return render(request, 'website/contacts.html')

4 个答案:

答案 0 :(得分:2)

您可以在URL中捕获一个标签,然后使用它确定要呈现的模板。

path('<slug:slug>', views.general_page, ...)

...

def general_page(request, slug):
    return render(request, 'website/{}.html'.format(slug))

答案 1 :(得分:0)

如果您的网站是完全静态的,则可以考虑使用静态框架,例如Jekyll

这样,您不必依赖主机服务器的功能,并且可以避免使用诸如django之类的复杂框架时可能出现的问题。

答案 2 :(得分:0)

我要感谢所有试图帮助我的人。 您的建议启发了我寻求解决方案。我在下面使用了代码,效果很好。 似乎不需要创建单独的视图,您可以使用TemplateView进行静态html文件呈现。那正是我想要的。

from django.contrib import admin
from django.urls import path
from django.views.generic import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', TemplateView.as_view(template_name='index.html'), name="index"),
    path('about/', TemplateView.as_view(template_name='about.html'), name="about"),
    path('team/', TemplateView.as_view(template_name='team.html'), name="team"),
    path('contacts/', TemplateView.as_view(template_name='contacts.html'), name="contacts"),
    path('researches/', TemplateView.as_view(template_name='researches.html'), name="researches"),
    path('publications/', TemplateView.as_view(template_name='publications.html'), name="publications"),
]

答案 3 :(得分:0)

这对我有用,我在 url.py 中导入了 views.py。

from django.conf.urls import url
from django.contrib import admin
from django.urls import path

from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'),
    path('about/', views.about, name='about'),
    path('team/', views.team, name='team'),
    path('contacts/', views.contacts, name='contacts'),
    path('researches/', views.researches, name='researches'),
    path('publications/', views.publications, name='publications'),
]

from layout.views import index,team,about ...

只需导入您所在文件夹的视图,在这种情况下,我从文件夹(应用程序)布局

导入视图