django2:如何使用不同的模板?

问题描述 投票:1回答:2

假设我创建了一个名为django_site的django项目。

我创建了两个子项目:site1polls

你看我在两个子项目目录中有两个index.html

但是,现在,如果我在网络浏览器localhost:8000/site1localhost:8000/polls上打开,他们都指向index.htmlpolls

我如何配置所以当我打开localhost:8000/site1它会使用index.htmlsite1

我在settings.py目录中的django_site

..
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'),],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

..

我的目录结构:

E:.
|   db.sqlite3
|   manage.py
|   tree.txt
|   tree1.txt
|   
+---site1
|   |   admin.py
|   |   apps.py
|   |   models.py
|   |   tests.py
|   |   urls.py
|   |   views.py
|   |   __init__.py
|   |   
|   +---migrations
|   |       __init__.py
|   |       
|   +---templates
|   |   \---site1
|   |       \---templates
|   |               index.html
|   |               
|   \---__pycache__
|           models.cpython-36.pyc
|           urls.cpython-36.pyc
|           views.cpython-36.pyc
|           __init__.cpython-36.pyc
|           
+---django_site
|   |   settings.py
|   |   urls.py
|   |   wsgi.py
|   |   __init__.py
|   |   
|   \---__pycache__
|           settings.cpython-36.pyc
|           urls.cpython-36.pyc
|           wsgi.cpython-36.pyc
|           __init__.cpython-36.pyc
|           
\---polls
    |   admin.py
    |   apps.py
    |   models.py
    |   tests.py
    |   urls.py
    |   views.py
    |   __init__.py
    |   
    +---migrations
    |   |   0001_initial.py
    |   |   0002_auto_20180214_0906.py
    |   |   __init__.py
    |   |   
    |   \---__pycache__
    |           0001_initial.cpython-36.pyc
    |           0002_auto_20180214_0906.cpython-36.pyc
    |           __init__.cpython-36.pyc
    |           
    +---static
    |       jquery-3.3.1.min.js
    |       
    +---templates
    |   \---polls
    |       \---templates
    |               index.html
    |               
    \---__pycache__
            admin.cpython-36.pyc
            apps.cpython-36.pyc
            models.cpython-36.pyc
            urls.cpython-36.pyc
            views.cpython-36.pyc
            __init__.cpython-36.pyc

我在urls.pydjango_site

from django.urls import include, path
from django.contrib import admin

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('site1/', include('site1.urls')),
    path('admin/', admin.site.urls),
]

我在urls.pysite1polls(他们是相同的):

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]
django python-3.x
2个回答
1
投票

你必须像这样配置网址:

在你的django_site directory你有一个url文件。你必须从你所有的django应用程序中获取网址:

from django.urls import include, path
from django.contrib import admin

from polls import views
from site1 import views

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('site1/', include('site1.urls')),
    ]

然后,在每个django模块中,您应该:

from django.urls import include, path
from django.contrib import admin

from polls import views

urlpatterns = [
    path('', views.your_function, name="index"),
    ]

site1一样:

from django.urls import include, path
from django.contrib import admin

from site1 import views

urlpatterns = [
    path('', views.your_function, name="index"),
    ]

views.your_function必须返回你的索引模板:index.html

你的功能可能是:

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

通过这种方式,你必须得到:path('', views.MyFunction, name="index"),


0
投票

我解决了这个问题:

views.pysite1polls

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

django_site里面我创建了一个文件夹templates,然后在这个文件夹中有两个文件夹site1polls。在每个子文件夹中我分别放了index.html

© www.soinside.com 2019 - 2024. All rights reserved.