Django入门的一些点和坑

创建配置项目

执行danjo-admin.exe startproject [projectname]创建一个项目。
执行django-admin.exe startapp [appname]创建一个app。
这里peoject和app的区别,可以认为是一个总分的关系,一个项目中可以包含有多个app,每个app可以负责项目中的不同模块,通过各自的urls.py实现路由。
之后大概需要自行创建views.py、urls.py等文件,如果有了自然不同担心,这里给个模板,没有的话照着复制粘贴一下。
视图文件

filename:views.py

from django.http import HttpResponse
from django.shortcuts import render
def index(request):
    context={}
    context['TestMessage']='hello,world<hr>这是tutorial的app'
    return render(request,'index.html',context)
    #return HttpResponse('ssss')

路由文件,这个路由文件是主app中的文件,tutorial是第二个app,在路由文件中导入其他app路由时需要使用到include,一定要先引入包from django.conf.urls import include,不然报错。

filename:urls.py

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    #默认路由
    url(r'^$',views.index),
    url(r'^tutorial/',include('tutorial.urls')),
]

还需要创建模板文件,模板就是前端的html页面,在每个app文件夹下新建templates,名字随意,叫这个为了方便整齐。
修改一下主app中的setting.py文件,这个配置文件一个项目只有一个,由于我们拥有两个app,需要先安装第二个app,tutorial就是我的第二个app。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tutorial',
]

修改其中的模板信息,模板路径修改一下’DIRS’这个键。
要注意,这里的选择性比较多,会有一点坑,分为几种情况

  1. ‘DIRS’=[]而且没有安装过app:那么不仅app的网站不能访问到,连主app的网站即BlueSite也无法访问,会报错TemplateNotFound。解决办法有两个: 一个是按照 [ 情况2 ] 手动设置路径,第二个时按照 [ 情况4 ] 配置好后直接去对应app目录下寻找模板文件。
  2. ‘DIRS’=[BASE_DIR+"/BlueSite/templates",BASE_DIR+"/tutorial/templates"]:这个是分别指定模板的路径,django会依次在文件夹中寻找对应名称的html文件,比如这里的两个文件中都有index.html,那么访问index.html的时候,会优先访问BlueSite路径下的文件,而不会访问到后者,因为前者在前优先。
  3. ‘DIRS’=[]:即为空,不管其余app中是否有对应的模板文件夹或者文件,django只会去主路由下的模板文件夹中寻找,即在BlueSite/templates文件夹中。
  4. ‘DIRS’=[],‘APP_DIRS’=True而且根据上一个步骤安装过app:那么就不用担心了,只需要在每个app目录下新建一个templates文件夹放置对应的模板文件即可,因为’APP_DIRS’这个选项意思就是在每个app目录下搜索templates文件夹去寻找模板文件,前提是已经安装了app。
#'DIRS': [BASE_DIR+"/BlueSite/templates"],
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            BASE_DIR+"/BlueSite/templates",
            BASE_DIR+"/tutorial/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',
            ],
        },
    },
]

templates模板文件夹中html名称冲突

其实上面配置模板的时候没有成功,还是有可能冲突,下面有一个比较好的解决方案。
setting.py文件中安装app,这个是肯定的,上面只安装了第二个,但是应该是最好全部安装,即有几个app写几个,如下,我有三个,我就安装了三个app。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'BlueSite',
    'tutorial',
    'blog',
]

templates文件目录的配置没有变,'DIRS’空着,然后’APP_DIRS’设为True
但是此时不能直接将王爷放在templates里面,比如,在BlueSite和tutorial的templates中各有一个index.html文件,在两个app的views.py中如果返回index.html的话,很有可能会一直是同一个页面,即便链接不同。因为他搜索的目录其实是一个目录,就是注册app的那个目录,并不是在各自目录下的文件夹中找模板。
为了区分不同app,在各自templates文件夹下新建一个和app同名的文件夹,把模板放到这个文件夹里,在views.py中调用的时候,使用BlueSite/index.html 或者 tutorial/index.html就可以了,不冲突。

静态文件放置

可以在Django项目根目录下放置static文件夹,也可以在不同app下分别设置单独的static文件夹方便管理各自的静态文件,我觉得这样很好,就说说这个方法吧。
setting.py文件中配置如下,有几个app就写几个。

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "BlueSite", "static"),
    os.path.join(BASE_DIR, "tutorial", "static"),
    os.path.join(BASE_DIR, "blog", "static"),
]

在各自app目录下新建static文件夹,在其中新建一个app同名文件夹,也是用于标记不同app,在同名文件夹下新建如css,js,image等文件夹。
引用的话,在html文件的head里这么写就好了。

{% load static %}
<link rel=stylesheet href="{% static 'BlueSite/css/index.css' %}">
这里有个小技巧

可以把每个app各自的文件放在各自的静态文件夹内,把jquery之类的通用静态文件放在根目录下的静态文件夹中,直接如下引用即可

<script language="JavaScript" src="js/jquery-3.3.1.min.js"></script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值