我想遵循将所有JavaScript放在页面底部的一般准则,以加快加载时间,并在Web应用程序(Django)中处理与jQuery版本冲突的一些讨厌问题.
但是,我经常会有一些代码,代码依赖于jQuery,但必须在页面上进一步(基本上代码不能移到底部).
我想知道是否有一种简单的方法来编写代码,以便即使jQuery尚未定义,代码也可以在定义jQuery时运行.
我不得不说,以下似乎有点矫枉过正,但我不知道另一种方法:
function run_my_code($) {
// jquery-dependent code here
$("#foo").data('bar', true);
}
var t = null;
function jquery_ready() {
if (window.jQuery && window.jQuery.ui) {
run_my_code(window.jQuery);
} else {
t = window.setTimeout(jquery_ready, 100);
}
}
t = window.setTimeout(jquery_ready, 100);
Run Code Online (Sandbox Code Playgroud)
实际上,我可能需要在页面中不止一次使用代码,代码不知道其他代码,所以即使这可能也行不通,除非我将每个jquery_ready重命名为jquery_ready_ guid,jquery_ready_ otherguid等等.
就是这样很明显,我将include(包括JavaScript <script type="text/javascript" src="jquery.min.js" />)放在页面的最底部,就在之前</body>.所以我不能用$.
我有一个Django应用程序,其中的某个地方是一个导致问题的递归导入.由于应用程序的大小,我有一个问题,指出循环导入的原因.
我知道答案是"只是不写循环导入"但问题是我很难弄清楚循环导入的来源,所以理想情况下,一个跟踪导入回原点的工具将是理想.
这样的工具存在吗?除此之外,我觉得我正在尽我所能避免循环导入问题 - 如果可能的话将导入移动到页面底部,将它们移动到函数内部而不是将它们放在顶部等等但仍然遇到问题.我想知道是否有任何提示或技巧完全避免它们.
在Django中,特别是当它遇到循环导入时,有时它会抛出一个错误,但有时会无声地通过,但会导致某些模型或字段不存在的情况.令人沮丧的是,这通常发生在一个上下文中(例如,WSGI服务器)而不是另一个上下文(shell).所以在shell中测试这样的东西会起作用:
Foo.objects.filter(bar__name='Test')
Run Code Online (Sandbox Code Playgroud)
但在网络上抛出错误:
FieldError:无法将关键字"bar__name"解析为字段.选择是:......
几个领域明显缺失.
所以它不可能是一个简单的问题的代码,因为它确实在外壳,但工作不是通过网站.
一些能够确定正在发生的事情的工具会很棒.ImportError可能是有史以来最不实用的异常消息.
在许多编程语言中,如下
找到foo([a-z]+)bar并替换GOO\U\1GAR
将导致整个匹配变为大写.我似乎无法找到python中的等价物; 它存在吗?
我正在考虑创建一个mixin表单类,以便我可以将一组通用字段添加到各种非常不同的表单中.仅仅使用它作为基类是行不通的,因为我希望能够使用其他表单作为基类,如下所示:
class NoteFormMixin(object):
note = forms.CharField()
class MainForm(forms.Form):
name = forms.CharField()
age = forms.IntegerField()
class SpecialForm(MainForm, NoteFormMixin):
favorite_color = forms.CharField()
Run Code Online (Sandbox Code Playgroud)
我唯一的问题是:这是如何工作的?到目前为止看起来如果我使用mixin,那么它无法识别mixin中设置的字段:
>>> ff1 = SpecialForm()
>>> ff1.fields
{'name': <django.forms.fields.CharField object at 0x178d3110>, 'age': <django.forms.fields.IntegerField object at 0x178d3190>, 'favorite_color': <django.forms.fields.CharField object at 0x178d3210>}
Run Code Online (Sandbox Code Playgroud)
这只是无法做到的事情吗?
我刚刚开始使用django-celery,我想将celeryd设置为守护进程.但是,这些说明似乎表明它一次只能配置一个站点/项目.芹菜可以处理多个项目,还是只能处理一个项目?而且,如果是这种情况,是否有一种干净的方法来设置celeryd为每个配置自动启动,这需要我为每个配置创建一个单独的init脚本?
根据它的文档ModelAdmin.list_display描述了一些配置方法/功能以便在管理员列表视图中使用和显示的方法:
admin_order_field (描述模型中用于按方法排序的字段)allow_tags (允许显示HTML而不是转义)short_description (设置列的标签)boolean (确定是否应将字段视为布尔字段以进行显示)它将它们描述为方法属性.
刚刚找到了一些方法/函数属性,用于模板过滤器:
is_safe,在将模板过滤器标记为安全时使用needs_autoescape,用于处理数据的自动转换Django(甚至是Python)还有哪些其他方法属性?或者这些是唯一的案例吗?
为了清楚起见,这就是我所说的具体内容.
在以下代码中:
class Foo(models.Model):
name = models.CharField(max_length=100)
color = models.CharField(max_length=100)
age = models.PositiveIntegerField()
def is_adult(self):
return age > 18
is_adult.boolean = True
is_adult.short_description = "Over 18?"
def colored_name(self):
return '<span style="color: %s">%s</span>' % (self.color, self.name)
colored_name.allow_tags = True
colored_name.short_desciption = "Name"
colored_name.admin_order_field = "name"
Run Code Online (Sandbox Code Playgroud)
我谈论的方法属性是is_adult.boolean,is_adult.short_description,colored_name.allow_tags,colored_name.short_description和colored_name.admin_order_field. …
(在任何人问之前,这不是功课.)
我有一组有兴趣的工人,即:
Bob:Java,XML,Ruby
苏珊:Java,HTML,Python
弗雷德:Python,Ruby
山姆:Java,Ruby
等等
(对于每个工人,实际上在10-25"兴趣"的范围内,我有大约40-50名工人)
与此同时,我需要在工人之间分配大量的任务.每项任务必须分配给至少 3名工人,工人必须至少符合其中一项任务的利益:
任务1:Ruby,XML任务2:XHTML,Python
等等.所以鲍勃,弗雷德或萨姆可以得到任务1; 苏珊或弗雷德可以得到任务2.
这一切都存储在数据库中:
Task
id integer primary key
name varchar
TaskInterests
task_id integer
interest_id integer
Workers
id integer primary key
name varchar
max_assignments integer
WorkerInterests
worker_id
interest_id
Assignments
task_id
worker_id
date_assigned
Run Code Online (Sandbox Code Playgroud)
每个工人的工作任务数量最多,大约为10个.有些利益比其他人更少见(即只有1或2个工人将其列为利息),有些利益更为普遍(即一半的工人列出他们的利益) ).
算法必须:
理想情况下,算法将:
迄今为止最困难的方面是处理这些问题:
我calc在CSS中使用新函数来获取对象的宽度,如下所示:
width: calc(100% - 40px);
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于这是在一个LESS文件中,LESS在编译期间"有用"地将其预转换为60%.
calc因为我需要浏览器来进行这种计算,所以我希望在函数中忽略数学,而不是更少.
无论如何,我可以让LESS忽略这个计算,所以我可以直接将它传递给浏览器?
使用list_editable时ModelAdmin,有没有办法更改用于可编辑字段的窗口小部件?我在文档中找不到任何内容.似乎这将是你能够自定义的东西.
在python中,如果我执行以下操作:
>>> list = [ 3, 2, 1]
>>> sorted_list = k.sort()
Run Code Online (Sandbox Code Playgroud)
然后sorted_list是None和list排序:
>>> sorted_list = k.sort()
>>> print list, sorted_list
[1, 2, 3] None
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行以下操作:
>>> list = [ 3, 2, 1]
>>> sorted_list = sorted(list)
Run Code Online (Sandbox Code Playgroud)
然后list保持未分类并sorted_list包含已排序列表的副本:
>>> print list, sorted_list
[3, 2, 1] [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有update词典功能的等价物.
这样我可以做这样的事情:
def foo(a, b, extra={}):
bar = { 'first': a, 'second': b }
special_function(**updated(bar, extra))
normal_function(**bar)
Run Code Online (Sandbox Code Playgroud)
而不是必须做这样的事情:
def foo(a, …Run Code Online (Sandbox Code Playgroud) django ×4
python ×4
algorithm ×1
celery ×1
celeryd ×1
daemon ×1
dictionary ×1
django-admin ×1
django-forms ×1
function ×1
import ×1
javascript ×1
jquery ×1
less ×1
methods ×1
mixins ×1
regex ×1
task ×1