如何解决如何在Django Administrator中添加自定义视图?
我使用pycharm创建了一个环境,并由https://github.com/app-generator/django-dashboard-adminlte.git的git clone安装了adminlte。并安装了adminlte3,django3.1和所有要求。然后运行 python manage.py runserver 并注册一个新用户,并且能够登录,查看所有页面,向html页面添加新链接。但是我无法在新页面上的按钮单击上添加带有jsonresponse的视图,并显示错误500-服务器错误。
我的新html页面是
{% extends "layouts/base.html" %}
{% block title %} Layout Boxed {% endblock %}
<!-- Element injected in the BODY element -->
{% block body_class %} sidebar-mini layout-boxed {% endblock body_class %}
<!-- Specific Page CSS goes HERE -->
{% block stylesheets %}
<!-- Google Font: Source Sans Pro -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<!-- Font Awesome -->
<link rel="stylesheet" href="/static/assets/plugins/fontawesome-free/css/all.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="/static/assets/css/adminlte.min.css">
<link rel="stylesheet" href="/static/assets/css/mapstyle.css">
<link rel="stylesheet" href="/static/assets/js/pages/gis/dist/map.css">
<style>
.map {
margin: 0;
padding: 0;
width: 900px;
height: 500px;
background:white !important;
border:1px solid #ccc;
}
</style>
{% endblock stylesheets %}
{% block content %}
<div class="content-wrapper">
<div id="lyrDiv"></div>
<div id="map" class="map"></div>
<button id="search">Search</button>
</div>
{% endblock content %}
<!-- Specific Page JS goes HERE -->
{% block javascripts %}
<!-- jQuery -->
<script src="/static/assets/plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap 4 -->
<script src="/static/assets/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- AdminLTE App -->
<script src="/static/assets/js/adminlte.min.js"></script>
<!-- AdminLTE for demo purposes -->
<script src="/static/assets/js/demo.js"></script>
<script src="/static/assets/js/pages/map.js"></script>
<script src="/static/assets/js/pages/search.js"></script>
{% endblock javascripts %}
search.js
$( "#search" ).click(function() {
$.get('/search/',{'csrfmiddlewaretoken':csrftoken},function(data){
alert(data); // here getting Error 500 - Server Error
});
});
我在/django-dashboard-adminlte/app/urls.py
下添加了一行re_path(r'^search/$',search.spatial_srch,name='search'),
和search.py
from app.models import *
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
@csrf_exempt
def spatial_srch(request):
data= Demotable.objects.all()
searchArr = []
output = {}
for c in data:
searchArr.append({'type': 'Feature','properties': {'id':c.id,'name': str(c.name)},'geometry': {'type': 'Point','coordinates': [c.the_geom.x,c.the_geom.y]}})
output = {'type': 'FeatureCollection','features': searchArr}
return JsonResponse(output)
当我单击“ Serach”按钮时,请求不会进入视图search.py我的代码有什么问题?我错过了什么配置?
解决方法
问题出在generate the error他们(不是很好)的方式上。那里是一个反模式的地狱,但是总之,这意味着在其中一个都抛出了一个例外:
- 找到模板
- 加载模板
- 或渲染模板
,他们抓住了它,但不让您看到发生了什么。不是很好的代码,您必须修改该文件才能开始对其进行调试:
@login_required(login_url="/login/")
def pages(request):
context = {}
# All resource paths end in .html.
# Pick out the html file name from the url. And load that template.
try:
load_template = request.path.split('/')[-1]
html_template = loader.get_template( load_template )
return HttpResponse(html_template.render(context,request))
except template.TemplateDoesNotExist:
html_template = loader.get_template( 'page-404.html' )
return HttpResponse(html_template.render(context,request))
# Remove or comment these lines:
#except:
#
# html_template = loader.get_template( 'page-500.html' )
# return HttpResponse(html_template.render(context,request))
我也不确定这是产生错误的特定位置,他们可能在其他地方也做类似的事情。
编辑
这是非常....非专业代码:
# Matches any html file
re_path(r'^.*\.*',views.pages,name='pages'),
否,它与任何“ html”文件都不匹配-它与所有导致不获取正则表达式的内容都匹配:
^ - start of string
.* - anything or nothing
\.* - >>>zero<<< or more dots
结果:\.*
被忽略,因为它无关紧要,因此它与所有内容都匹配,并且如果您将re_path
放在其下面,则将永远不会使用它,因为Django使用“先赢者”方法。
因此您的网址与他们的网址匹配,然后将其路由到页面视图:
load_template = request.path.split('/')[-1]
由于request.path为'/search/'
,因此'/search/'.split('/')[-1]
给出了空字符串,这会造成问题。
我强烈建议修复其网址路径:
# Matches any html file
re_path(r'\.html$',
或者将您的re_path放在他们的上方。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。