【问题标题】:Django - LOCALHOST missing despite other views workingDjango - 尽管其他视图正常工作,但 LOCALHOST 丢失
【发布时间】:2016-08-29 01:17:33
【问题描述】:

背景

完成了 Django 的教程并创建了多个视图:

  • /管理员
  • /app

尽管 localhost/app 和 localhost/admin 视图正常工作,但“localhost:8000”目前存在问题(见下文):

代码

文件夹结构(virtualenv):

main/
   db.sqlite3
   manage.py
   app/
      _init_.py
      admin.py
      apps.py
      models.py
      tests.py
      views.py
      urls.py
      migrations/
         _init.py

   main/
      _init_.py
      settings.py
      urls.py
      wsgipy

../main/app/views.py:

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the app index.")

../main/app/urls.py:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

../main/main/urls.py:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app/', include('app.urls')),
]

问题/问题:

  1. localhost/app 或 localhost/admin 显示呈现的页面。但是,“localhost:8000”不显示原始的 django 登录页面(尽管它以前可以工作)。我错过了什么?
  2. 您是否推荐任何其他文件夹结构?据我了解,将 /main/main 放在当前位置是不合适的。您对新的文件夹结构有什么建议吗?

【问题讨论】:

  • 只是想清楚一点:请在您的问题中使用完整的 URL,它们应该以 http:// 开头。

标签: python django


【解决方案1】:

localhost/app 或 localhost/admin 显示呈现的页面。但是,“localhost:8000”不显示原始的 django 登录页面(尽管它以前可以工作)。我错过了什么?

看起来 main/main/urls.py 是您的全局 url 配置,这意味着 localhost:8000 没有定义路由(仅 localhost:8000/adminlocalhost:8000/app。)您应该将 url 模式放在全局配置中.你已经在应用程序的范围内定义了url(r'^$', views.index, name='index'),所以Django实际上是在读取它时加上app/

您是否推荐任何其他文件夹结构?据我了解, 将 /main/main 放在当前位置是很糟糕的形式。 您对新的文件夹结构有什么建议吗?

我认为一个好的结构:

server/
  urls.py
  manage.py
  wsgi.py
  settings.py
  apps/
    app1/
    app2/
    app3/

【讨论】:

    【解决方案2】:

    ../main/main/urls.py 是您定义 URL 模式的入口点,您没有定义任何模式来处理 /,这就是 localhost:8000 在这种情况下的样子。您有两个基本选择。

    首先,如果您希望../main/app 中的内容具有包含/app/ 的URL,您需要定义将存在于根级别的URL 模式。首先为根 URL 创建一个视图函数,然后为 / 添加一个 URL 模式,如下所示:

    ../main/main/views.py

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse("This is the home page/site root")
    

    ../main/main/urls.py

    from django.conf.urls import include, url
    from django.contrib import admin
    from . import views
    
    urlpatterns = [
        url(r'^$', ), views.index, name='home',
        url(r'^admin/', admin.site.urls),
        url(r'^app/', include('app.urls')),
    ]
    

    第二个选项,如果您希望../main/app/ 中的视图存在于根 URL 下(/ 而不是 /app/),那么只需更改 app../main/main/urls.py 中导入的 URL 模式的基础:

    ../main/main/urls.py

    from django.conf.urls import include, url
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^/', include('app.urls')),
    ]
    

    您的文件夹结构没有问题。当然还有其他布局可以用于您的项目,但您使用的是 Django 的默认开箱即用布局。除非您有特定的理由使用不同的布局,否则请坚持使用现有的布局。花时间学习更多关于 Django 的知识,当您更好地了解 Django 的各个部分如何组合在一起时,不要担心尝试优化您的项目布局。

    我认为您需要考虑的是您希望网站的 URL 看起来像什么,然后围绕它构建布局。除非您想以这种方式组织代码,否则您不需要 app 应用程序。作为起点,您可以将 app 应用程序中的所有内容放在 main 下,然后扩展到其他对项目有意义的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多