主路线是:
先加模板,加好后去视图里面注册,然后在URLS里面添加url路径的映射
模板一:
<!--base.html-->
<h1 style="margin:auto;width:40%">蓝竹科技开放职位</h1>
<!--定义标题:蓝竹科技开放职位,居中显示并且占用页面宽度的50%-->
<p></p>
<!--#使用block指令来定义块,块的名字就叫content-->
{% block content %}
{% endblock %}
模板二:
<!--html想要显示,首先要去视图层把自定义的页面加进去-->
<!--继承base页面-->
{% extends 'base.html' %}
<!--下面的content内容会把base里面的content内容给替换掉-->
<!--html注释内容最快的方式,光标定位在要注释的行,按ctrl+/-->
{% block content %}
终于等到你,期待加入我们,用技术去探索一个新世界
{% if job_list %}
<!--上面的意思是,判断job_list是否有内容,有则执行下面的for循环-->
<!--job_list是从视图层传过来的-->
<!--ul标签来定义一个列表,每一行是一个职位,href是个链接,链接指向职位详情的URL-->
<ul>
<!--开始for循环-->
{% for jobs in job_list %}
<li>{{jobs.job_type}} <a href="/jobs/{{jobs.id}}/" style="color:blue">{{jobs.job_name}}</a> {{jobs.job_city}}</li>
{% endfor%}
<!--结束for循环-->
</ul>
{% else %}
{% endif %}
{% endblock %}
模板三:
{% extends 'base.html' %}
{% block content %}
<!--<div> 标签定义 HTML 文档中的一个分隔区块或者一个区域部分。-->
<div style="margin:auto;width:50%">
<!-- <a> 标签定义超链接,用于从一个页面链接到另一个页面。-->
<!-- <a> 元素最重要的属性是 href 属性,它指定链接的目标。-->
<a href="/joblist" style="color:blue">返回职位列表</a>
{% if jobs %}
<!-- html中的class=是一个选择器,可以理解为一个标识,用来标识特定的标签-->
<div class="position_name">
<h2>岗位名称:{{jobs.job_name}}</h2>
城市:
{{jobs.job_city}}
</div><br>
<!-- <hr> 标签定义 HTML 页面中的主题变化(比如话题的转移),并显示为一条水平线。 <hr> 元素被用来分隔 HTML 页面中的内容(或者定义一个变化)。在 HTML 中,<hr> 标签没有结束标签。-->
<hr>
<div class="position_responsibility" style="width:600px;">
<h3>岗位职责:</h3>
<!-- <pre> 标签可定义预格式化的文本。被包围在 <pre> 标签 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。-->
<pre style="font-size:16px">{{jobs.job_responsibility}}
</pre>
<p></p>
<!-- <br> 标签插入一个简单的换行符。<br> 标签是一个空标签,意味着它没有结束标签。会让这个区块下面有较大的空白区域-->
</div><br>
<hr>
<div class="position_requirement" style="width:600px;">
<h3>任职要求</h3>
<pre style="font-size:16px">{{jobs.job_requirement}}
</pre>
</div>
<br>
<div class="apply_position">
<!-- <input> 标签规定了用户可以在其中输入数据的输入字段-->
<input type="button" style="width:120px;background-color:lightblue;" value="申请"/>
</div>
{% else %}
<!-- <p> 标签定义段落。-->
<!-- <p>元素会自动在其前后创建一些空白。浏览器会自动添加这些空间,您也可以在样式表中规定。也就是较小的空白行-->
<p>职位不存在</p>
{% endif %}
{% endblock %}
</div>
job应用视图views.py
from django.shortcuts import render
from django.template import loader
from job.models import work
from job.models import JobTypes,Cities
from django.http import HttpResponse
from django.http import Http404
# Create your views here.
#一、使用函数将html页面定义在视图层面
def joblist(request):
job_list=work.objects.order_by('job_type')#work.objects.order_by是django modle里面的语法,可以直接取出work职位列表,并且按照职位类型排序
template=loader.get_template('joblist.html')#用加载器将模板加载进来
context={'job_list':job_list}#定义一个上下文
for jobs in job_list:
jobs.job_city=Cities[jobs.job_city][1]
jobs.job_type=JobTypes[jobs.job_type][1]
return HttpResponse(template.render(context))
#别忘了将joblist视图定义在url路径里面
def detail(request,jobs_id):
try:
jobs=work.objects.get(pk=jobs_id)
jobs.job_city=Cities[jobs.job_city][1]
except work.DoesNotExist:
raise Http404("jobs does not exist")
return render(request,'job.html',{'jobs':jobs})
job应用urls.py
from django.conf.urls import url
from job import views
urlpatterns=[
#职位列表
url(r"^joblist/",views.joblist,name="joblist"),
url(r"^jobs/(?P<jobs_id>\d+)/$",views.detail,name="detail")#joblist.html中定义的超链接路径,将jobs_id作为参数传给了views.detail
]
主应用settingspy
INSTALLED_APPS = [
'job',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
主应用url.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import include,url
urlpatterns = [
url(r"^",include("job.urls")),#通过include将job.urls中的路径都映射过来
path('admin/', admin.site.urls),
]
成果展示