当我在我的第一个django支持的网站上工作时,我不断学习新的东西,并在我去的时候对我的应用程序进行各种更改和添加.我尝试遵循DRY和pythonic原则,并且在编码时要聪明,但最终我必须把网站带到现场,并且确定在我做完之后不久,新的和退出的东西将会出现在管道上,我将要实现它.
考虑到这一点,做乡亲有关于我如何准备我的代码的任何建议,现在要为未来做好准备,尽可能为这些不可预见的当前/未知升级/添加到我的代码库?
你希望你在一开始就做了什么,这会让你的网站在你的网站启动和运行时变得更轻松?
datetime.datetime.utcnow())get_absolute_url()和反向查找)tools应用程序,以包含我可能希望在将来的项目中使用的小型可重用模板标签和实用程序功能(以后不需要将它们分离)这些是小技巧,有些直接来自django-docs,但我认为它们有所帮助.
你呢?对于为未来做好准备的新应用或项目,您的最佳做法是什么?
我对Django的信号不是很熟悉,可以使用一些帮助.
如何在保存实例之前修改pk_set?我是否必须向信号呼叫者返回一些东西(比如kwargs)?或者我保存instance自己?
作为一个简单的例子:我希望确保在pk=1保存时我的所有视频都包含类别.我该怎么做m2m_changed?
class Video(models.Model):
category = models.ManyToManyField('Category')
def video_category_changed(sender, **kwargs):
action = kwargs.pop('action', None)
pk_set = kwargs.pop('pk_set', None)
instance = kwargs.pop('instance', None)
if action == "pre_add":
if 1 not in pk_set:
pk_set.update( [ 1 ] ) # adding this to the set
# do something else?
# profit?
m2m_changed.connect( video_category_changed, sender=Video.category.through )
Run Code Online (Sandbox Code Playgroud) 我有两个搜索/替换命令,我发现自己经常在vim中运行以清理HTML代码,因此我可以在线复制/粘贴它.命令是:
:%s!<!\<!g
:%s!>!\>!g
Run Code Online (Sandbox Code Playgroud)
我想要一种方法,我可以将这两个命令映射到一起运行...我做了一些搜索如何使用:mapvimrc中的命令,但是,我无法看到如何将两行合并为一个命令,即使用单击键(或单个笔画序列)运行.
谢谢!
我有两个数据表.两个表都有一CUSTOMER_ID列(数字).我试图得到所有唯一值的列表,CUSTOMER_ID 并知道CUSTOMER_ID两个表中是否存在或只存在一个(以及哪一个).
我可以很容易地得到一个独特的列表CUSTOMER_ID:
SELECT tblOne.CUSTOMER_ID
FROM tblOne.CUSTOMER_ID
UNION
SELECT tblTwo.CUSTOMER_ID
FROM tblTwo.CUSTOMER_ID
Run Code Online (Sandbox Code Playgroud)
我不能只为SELECTstatemtn 添加一个标识符列(如:),SELECT tblOne.CUSTOMER_ID, "Table1" AS DataSource因为那时记录不是唯一的,它将获得两组数据.
我觉得我需要在此查询中的其他位置添加它,但我不确定如何.
对于联合查询输出,我需要一个额外的列,可以告诉我我看到的唯一值是否存在于:(1)两个表,(2)表一或(3)表二.
我有许多Django测试,通常使用py.test运行它们.我最近在一个新文件中添加了一个新的测试用例test_selenium.py.这个测试用例使用了LiveServerTestCase和StaticLiveServerTestCase类(这是我的第一个,通常我只是使用TestCase).
在这个新文件中添加这一批新测试导致后续测试在py.test中失败(在它们全部通过之前).LiveServerTestCase在py.test 之后,数据库似乎没有被"重置" .我可以告诉我,因为我的模型的pk值增加了.
当我使用Django测试运行器运行这些测试时,它们都会通过,并在后续测试pk中重置 ; 在py.test测试运行器中pk,在LiveServerTestCase运行后的后续测试中会增加.因此,如果我在我的测试中硬编码创建一个对象并根据pk我期望它失败来检索它,因为Django和py.test之间的数据库是不同的.
任何想法为什么会这样,以及如何解决它?
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
class UpdateCountSelenium(StaticLiveServerTestCase):
def setUp(self):
self.selenium = webdriver.Firefox()
self.delay = 3
def tearDown(self):
self.selenium.quit()
def test_ajax_hit(self):
self.selenium.get("%s%s" % (self.live_server_url, '/1/'))
# waits for javascript to load and tests the …Run Code Online (Sandbox Code Playgroud) 我使用的是vim并且有一个大文本文件,其中包含一些在throoghout中抛出的html.我正在尝试为网络准备它,并需要将<p></p>标签添加到尚未格式化的行.这是我的一个例子:
Paragraph text one one line [... more ... ]
Other paragraph text on the next line [... more ... ]
<h1>html element thrown in on its own line</h1>
More paragraph text [... more ... ]
<!-- some other element (always own line) -->
There is still more text!
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来搜索不以<字符开头的行,对于这些行,添加开始和结束<p></p>标记...以便之后,我的文件类似于:
<p>Paragraph text one one line [... more ... ] </p>
<p>Other paragraph text on the next line [... more ... …Run Code Online (Sandbox Code Playgroud) 使用next()(每次应用相同的函数)迭代x次的简单方法是什么?
我在Sharepoint工作,对HTML的控制有限; 我所能做的就是找到了其ID的元素,追查最近<td>,hide()它,然后继续前进到下一个(我不希望所有<td>的,只是约7或8连胜).
下面的代码有效,但不是很漂亮.
$("#my-easily-identifiable-id").closest("td").hide();
$("#my-easily-identifiable-id").closest("td").next().hide();
$("#my-easily-identifiable-id").closest("td").next().next().hide();
$("#my-easily-identifiable-id").closest("td").next().next().next().hide();
[ ... etc ... ]
Run Code Online (Sandbox Code Playgroud)
有什么更好的方法呢?
谢谢
PS:添加小提琴(天才)
我试图避免joins在 Rails 中插入字符串,因为我注意到将查询器链接在一起时灵活性会降低。也就是说,我觉得它joins(:table1)比joins('inner join table1 on table1.id = this_table.table1_id').
我想完成的是:
FROM table1
INNER JOIN table2 on table2.id = table1.table2_id
LEFT JOIN table3 on table3.id = table2.table3_id
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何使用 Rails 的说法来做到这一点:
Table1.joins(table2: :table3)
Run Code Online (Sandbox Code Playgroud)
结果在最终表上的 INNER 连接。
FROM table1
INNER JOIN table2 on table2.id = table1.table2_id
INNER JOIN table3 on table3.id = table2.table3_id
Run Code Online (Sandbox Code Playgroud)
如果我用left_outer_joins...
Table1.left_joins(table2: :table3)
Run Code Online (Sandbox Code Playgroud)
结果在两个表上的 LEFT 连接(不需要)。
FROM table1
LEFT JOIN table2 on table2.id = table1.table2_id
LEFT JOIN table3 on table3.id …Run Code Online (Sandbox Code Playgroud) 我正在开发一个django项目,并希望在url的末尾包含一个slug,就像在stackoverflow.com上所做的那样:http://example.com/object/1/my-slug-generated-from-我的标题
对象ID将用于查找项目,而不是slug - 而且,就像stackoverflow.com一样,当获取链接时(仅显示它),slug根本不重要.
问题:动态生成slug是否存在下行(或上行),而不是将其保存为实际的数据库字段?
例如(不是真正的代码):
class Widget(models.Model):
title = models.CharField()
def _slug(self):
return slugify(self.title)
slug = property(_slug)
Run Code Online (Sandbox Code Playgroud)
而不是使用类似AutoSlugField的东西(例如)?
由于我的计划是让它与标题匹配,我不知道在数据库中是否有重复字段是否有意义.
谢谢!
我有一个模块来帮助定义某些方法、常量和类方法。它正在动态地创建它们。我需要帮助了解如何使用 Yard Doc 的@macro功能来对齐文档并从包含的模块内部设置实例、类和常量文档。
在它的基本情况下,它看起来像这样:
module Constantizer
extend ActiveSupport::Concern
# @!macro [attach] define_constant
# @method $1?
# Is this a $1?
# @return [Boolean]
module ClassMethods
def define_constant(label, value, description)
const_set(label.to_s.upcase, value)
define_method("#{label}?") { self.id == value }
define_singleton_method(label) { find(value) }
end
end
end
class MyRecord < ActiveRecord::Base
include Constantizer
# @!parse include Constantizer
attr_accessor :label, :id
define_constant :one, 1, 'the number one'
define_constant :two, 2, 'the number two'
# ... etc ...
end
Run Code Online (Sandbox Code Playgroud)
这将define_constant创建一个实例方法、一个常量和一个类方法。 …