【问题标题】:How to configure Django views and urls to render specific templates如何配置 Django 视图和 url 以呈现特定模板
【发布时间】:2016-02-19 08:27:06
【问题描述】:

当我调出 127.0.0.1:8000 时,显示的当前页面是 something.html 模板。

我需要让它在第一次启动时出现 index.html,然后当我点击其他部分时,它应该转到 127.0.0.1:8000/something.html(或 127.0.0.1:8000/myapp/something.html) html).

实现这一目标的结构是什么?
我经常收到错误消息:The current URL didn't match any of these.

目前,我的结构是

project
     ---myapp
          ---admin.py
          ---models.py
          ---url.py
          ---views.py
     ---static
     ---templates
          ---myapp
             ---html files
     ---mysite
          ---settings.py
          --- url.py

在我的 settings.py 下

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

在 mysettings/url.py 下

   urlpatterns = [
        # Examples:
        url(r'^$', 'mysite.views.home', name='home'),
        url(r'^myapp/', include('myapp.urls')),
        url(r'^admin/', include(admin.site.urls)),
    ]

mysite/urls.py

from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls import patterns
from django.views.generic import TemplateView


urlpatterns = [
    # Examples:
    url(r'^', include('myapp.urls')),
    url(r'^admin/', include(admin.site.urls)),
]


admin.site.site_header = 'Admin'

myapp/url.py

from . import views
from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView


urlpatterns = patterns('',
    #brings up something.html when we comment it out. No module found if included.
    #url(r'^$', views.home, name='home'),
    url(r'^$', views.post_list, name='post_list'),
)

【问题讨论】:

    标签: python django django-templates django-views


    【解决方案1】:
    1. mysite/urls.py 中包含您的myapp 应用程序的网址
    from django.conf.urls import include, url
    from django.contrib import admin
    from django.conf import settings
    
    urlpatterns = [
        url(r'^', include('myapp.urls')),
        url(r'^admin/', include(admin.site.urls)),
    
    ]
    

    现在,所有以127.0.0.1:8000 开头的url 都会检查是否有可以处理请求的视图。我建议您阅读本文以了解 Django URL 调度程序的工作原理:[Django 文档 - URL Dispatcher] (https://docs.djangoproject.com/en/1.8/topics/http/urls/)。 2.在myapp.urls中添加新路由:

    from django.conf.urls import url, patterns
    from . import views
    
    urlpatterns = patterns('',
        url(r'^$', views.home, name='home'),
        url(r'^something$', views.something, name='something'),
        url(r'^posts$', views.post_list, name='post_list'),
    )
    

    现在:
    127.0.0.1:8000/将执行views.home的代码
    127.0.0.1:8000/something将执行views.something的代码
    127.0.0.1:8000/posts将执行views.post_list的代码
    现在让我们定义这些视图

    3:在myapp.views中定义视图:

    from django.shortcuts import render
    
    def home(request):
        """
        Return home page
        """
        return render(request, 'myapp/home.html')
    
    def something(request):
        """
        Return something page
        """
        return render(request, 'myapp/something.html')
    
    def post_list(request):
        """
        Return something page
        """
        # do what you want
    
    1. myapp/templates/myapp/ 中添加您的模板。添加home.htmlsomething.html

    现在忘了,`.html

    【讨论】:

    • 谢谢。这说明了。但是,当我在设置完这样的所有内容后访问 127.0.0.1:8000 时,something.html 在 home.html 之前的启动时弹出。这是为什么呢?
    • 'module' 对象没有属性 'home'
    • mysite.urls.py 中删除url(r'^$', 'mysite.views.home', name='home'), 行并仅使用url(r'^', include('myapp.urls')),
    • 这是我在 mysite.urls.py 下使用的唯一一行
    • 当我从 myapp.urls 中删除 url(r'^$', views.home, name='home') 时,出现了 something.html。但是当我放置那条线时,它会创建“模块”对象没有属性“家”味精。
    【解决方案2】:
    1. 您创建了一个url(附有view)。
    2. view 中,您可以呈现任何您想要的 html 页面。

    如果您使用基于函数的视图,您的 'mysite.views.home' 可能如下所示:

    def home(request):
        ...
        return render(request, 'path/to/index.html')
    

    等等。

    这是基础知识,所以我不会多说。你可以找到一个关于将 url 映射到视图 there 的好教程。

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 2021-09-05
      • 2017-04-01
      • 2011-09-26
      • 1970-01-01
      • 2014-11-26
      • 2018-01-08
      • 2019-03-10
      • 2018-04-06
      相关资源
      最近更新 更多