课程机构列表页面数据展示
本地图片上传至Django项目中
model
class CourseOrg(models.Model):
city = models.ForeignKey(CityDict,verbose_name=u"所在城市")
name = models.CharField(max_length=100,verbose_name=u"机构名称")
category = models.CharField(default='pxjg',choices=(("pxjg",u"培训机构"),("gx",u"高校"),("gr",u"个人")),max_length=10,verbose_name=u"机构类别")
desc = models.TextField(verbose_name=u"机构描述")
fav_nums = models.IntegerField(default=0,verbose_name=u"收藏人数")
click_nums = models.IntegerField(default=0,verbose_name=u"点击人数")
addr = models.CharField(max_length=100,verbose_name=u"机构地址")
image = models.ImageField(upload_to="org/%Y%m",verbose_name="logo")
add_time = models.DateTimeField(default=datetime.now,verbose_name=u'添加时间')
通过xadmin插入img,从本地上传文件,需要在setting中配置MEDIA_ROOT,并在Django目录下新建“media”目录。(MEDIA_URL配置url会用到),
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
这样点击“选择文件”上传,本地图片会传到Django的media中。
显示本地上传的图片
在settings中的TEMPLATES中添加
'django.core.context_processors.media',
这样在前端的{{ MEDIA_URL }}才能转换成 “/media/”。
{% for obj in queryOrg %}
<a href="org-detail-homepage.html">
<img width="200" height="120" src="{{ MEDIA_URL }}{{ obj.image }}"/>
</a>
{% endfor %}
此时,虽然前端显示的url正确了,,但是还是不能显示图片,需要在前端配置url,才能正常显示图片。
from django.views.static import serve
from settings import MEDIA_ROOT
urlpatterns = [
url(r'^media/(?P<path>.*)$',serve,{'document_root':MEDIA_ROOT}),
]
实现分页
https://blog.csdn.net/qq_34964399/article/details/79596428
按照点击量前3进行排序
hot_orgs = CourseOrg.objects.all()order_by("-click_nums")[:3]
按照城市和类别并联筛选 课程机构
class OrgView(View):
def get(self,request):
Citys = CityDict.objects.all()
Orgs = CourseOrg.objects.all()
# 城市筛选
cur_city = request.GET.get('city','')
if cur_city:
Orgs = Orgs.filter(city__id=int(cur_city))
# 类别筛选
cur_category = request.GET.get('category',"")
if cur_category:
Orgs = Orgs.filter(category=cur_category)
return render(request,'org-list.html',{"Citys":Citys,"orgs":orgs,
'OrgsNum':OrgsNum,
"cur_city":cur_city,
"cur_category":cur_category,
})
前端
<li>
<h2>机构类别</h2>
<div class="cont">
<a href="?city={{ cur_city }}&category="><span {% ifequal cur_category "" %}class="active2"{% endifequal %}>全部</span></a>
<a href="?city={{ cur_city }}&category=pxjg"><span {% ifequal cur_category "pxjg" %}class="active2"{% endifequal %}>培训机构</span></a>
<a href="?city={{ cur_city }}&category=gx"><span {% ifequal cur_category "gx" %} class="active2"{% endifequal %}>高校</span></a>
<a href="?city={{ cur_city }}&category=gr"><span {% ifequal cur_category "gr" %} class="active2"{% endifequal %}>个人</span></a>
</div>
</li>
<li>
<h2>所在地区</h2>
<div class="more">更多</div>
<div class="cont">
<a href="?city=&category={{ cur_category }}"><span class="{% ifequal cur_city "" %}active2{% endifequal %}">全部</span></a>
{% for city in Citys %}
<a href="?city={{ city.id }}&category={{ cur_category }}" ><span class="{% ifequal city.id|stringformat:'i' cur_city %}active2{% endifequal %}">{{ city.name }}</span></a>
{% endfor %}
</div>
</li>
这样就可以并联筛选了
Ajax和ModelForm写用户咨询表单
https://blog.csdn.net/qq_34964399/article/details/80416365
通过Ajax实现用户对机构的收藏
model
class UserFavorite(models.Model):
user = models.ForeignKey(UserProfile,verbose_name=u"用户")
fav_id = models.IntegerField(default=0,verbose_name=u"数据id")
fav_type = models.CharField(max_length=10,choices=((1,u"课程"),(2,u"课程机构"),(3,u"讲师")),default=1,verbose_name=u"收藏类别")
add_time = models.DateTimeField(default=datetime.now,verbose_name=u"添加时间")
views
class AddFavView(View):
def post(self,request):
ret = {'status':True,'data':None,'error':None}
if not request.user.is_authenticated():
ret['status'] = False
return HttpResponse(json.dumps(ret))
# 判断该机构是否已经被收藏,如果已收藏:数据库删除该记录,变成未收藏
org_id = request.POST.get("fav_id",0) # 如果不写0,如果未取到fav_id则为None,下面的filter中fav_id=None的话会错
fav_type = request.POST.get("fav_type",0)
exist_record = UserFavorite.objects.filter(user=request.user,fav_id=int(org_id),fav_type=int(fav_type))
# 该机构已经被用户收藏则取消收藏
if exist_record:
exist_record.delete()
ret['data'] = "收藏"
return HttpResponse(json.dumps(ret))
# 该机构未被用户收藏
else:
if int(org_id) > 0 and int(fav_type) > 0:
userFav = UserFavorite()
userFav.user = request.user
userFav.fav_id = int(org_id)
userFav.fav_type = int(fav_type)
userFav.save()
ret['data'] = "已收藏"
return HttpResponse(json.dumps(ret))
else:
ret['status'] = False
ret['data'] = "收藏出错"
return HttpResponse(json.dumps(ret))
前端Ajax
$('.collectionbtn').on('click',function(){
$.ajaxSetup({
beforeSend:function(xhr,settings){
xhr.setRequestHeader('X-CSRFtoken',"{{csrf_token}}");
}
});
$.ajax({
url:'{% url 'org:add_fav' %}',
type:'POST',
data:{'fav_id':{{ course_org.id }},'fav_type':2},
success:function(data){ // 这个data是上面的data发送给服务端后,服务端返回的值
var ret = JSON.parse(data);
if(ret['status'])
{$(".collectionbtn").html(ret['data'])}
else
{if(ret['data'] == "收藏出错" ){
alert(ret['data']);
}
else{
window.location.href="/login/";
}
}
},
error:function(){
alert('error') // 如果后端发生了未知错误(捕获到的错误不是未知错误),则会执行这里。比如 return HttpResponse(json.dumps(a1qdwq))
}
})
});
这样就可以收藏和取消收藏了
添加学习用户
https://blog.csdn.net/qq_34964399/article/details/79515440 第一段