Как написать одну функцию представления для отображения нескольких HTML из разных путей URL-адресов? - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь избежать самостоятельного копирования функций представлений, но понятия не имею, как это сделать. Мои взгляды имеют небольшие различия, и определенно есть способ рендеринг HTML-страниц с одной функцией в этом случае. Я экспериментировал с URL-адресом "name", но потерпел неудачу. Я только начал с 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')

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Если ваш сайт полностью статичен, вы можете рассмотреть возможность использования статической структуры, например Jekyll .

Таким образом, вам не нужно зависеть от функций хост-сервера и избегать проблем, которые могут возникнуть при использовании сложной инфраструктуры, такой как django.

0 голосов
/ 27 августа 2018

Я хотел бы поблагодарить всех людей, которые пытались мне помочь. Ваши советы вдохновили меня на решение. Я использовал код ниже, и он работает хорошо. Похоже, что нет необходимости создавать отдельное представление, и вы можете использовать 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"),
]
0 голосов
/ 24 августа 2018

Вы можете перехватить слаг в URL и использовать его, чтобы определить, какой шаблон отображать.

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

...

def general_page(request, slug):
    return render(request, 'website/{}.html'.format(slug))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...