我正在配置一个Django项目,该项目使用服务器文件系统来存储应用程序静态文件(STATIC_ROOT)和用户上传的文件(MEDIA_ROOT).
我现在需要在亚马逊的S3上托管所有内容,所以我为此创建了一个存储桶.使用django-storages与boto存储后端,我设法收集静态上传到S3斗:
MEDIA_ROOT = '/media/'
STATIC_ROOT = '/static/'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'KEY_ID...'
AWS_SECRET_ACCESS_KEY = 'ACCESS_KEY...'
AWS_STORAGE_BUCKET_NAME = 'bucket-name'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Run Code Online (Sandbox Code Playgroud)
然后,我遇到了一个问题:MEDIA_ROOT并且STATIC_ROOT没有在存储桶中使用,因此存储桶根目录包含静态文件和用户上载的路径.
那么我可以设置:
S3_URL = 'http://s3.amazonaws.com/%s' % AWS_STORAGE_BUCKET_NAME
STATIC_URL = S3_URL + STATIC_ROOT
MEDIA_URL = 'S3_URL + MEDIA_ROOT
Run Code Online (Sandbox Code Playgroud)
并在模板中使用这些设置,但在S3中存储时,静态/媒体文件没有区别django-storages.
怎么做到这一点?
谢谢!
django amazon-s3 static-files django-settings django-storage
我正在使用i18n_patternsDjango 1.4 的新功能:
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
admin.autodiscover()
urlpatterns += i18n_patterns('',
url(r'^admin/', include(admin.site.urls)),
)
Run Code Online (Sandbox Code Playgroud)
它适用于所有活动语言:
/en/admin/ # Ok
/es/admin/ # Ok
Run Code Online (Sandbox Code Playgroud)
但这失败了:
/admin/ # 404 Not found
Run Code Online (Sandbox Code Playgroud)
如何避免404错误并重定向到所请求URL的语言前缀版本(不仅仅是管理面板)?
是编写自定义中间件的解决方案吗?为什么在Django中默认不会出现这种情况?
我想使用Google Fonts目录中的字体集合.我选择了样式并link在项目模板中包含CSS 标记.
或者,使用谷歌字体,您也可以下载该集合,你得到的是一个包含所有字体样式的zip文件.
我可以创建一个与Google允许我在HTML中包含的CSS相当的CSS,因此如果访问者无法访问Google Font API,我想提供自托管字体文件作为后备.
如何设置此功能,并防止下载Google字体文件和自托管字体文件?如果用户可以访问Google字体,则浏览器不应下载该字体的自托管版本.
给定一个名为MainModela和a 的模型RelatedModel,其中后者有一个ForeignKey字段MainModel:
class MainModel(models.Model):
name = models.CharField(max_length=50)
type = models.BooleanField()
class RelatedModel1(models.Model):
main = models.ForeingKey(MainModel):
name = models.CharField(max_length=50)
class RelatedModel2(models.Model):
main = models.ForeingKey(MainModel):
name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
和相应的ModelAdmin类:
class RelatedModel1InlineAdmin(admin.TabularInline):
model = RelatedModel1
class RelatedModel2InlineAdmin(admin.TabularInline):
model = RelatedModel2
class MainModel(admin.ModelAdmin):
inlines = [RelatedModel1, RelatedModel2]
Run Code Online (Sandbox Code Playgroud)
这是默认行为,你得到两个内联,每个相关模型一个.现在的问题是如何完全隐藏所有的内联的时候MainModel正在创建实例(ModelAdmin的add_view),并显示了内联RelatedModel1时type的现场MainModel实例True,并显示了内联RelatedModel2时False.
我打算为属性创建一个描述符ModelAdmin.inline_instances,但我意识到我需要访问正在编辑的对象实例,但它作为参数传递.
有帮助吗?
谢谢!
我有一些模板用于我的前端代码,例如:
<div class="row">
<div class="my-header col-md-1">
<!-- comments -->
{{ title }}
</div>
<div class="my-container col-md-11">
{% if (content) { %}
{{ content }}
{% } else { %}
<p>Empty</p>
{% } %}
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我正在使用grunt-contrib-jst将它们全部存储在一个文件中,然后在另一个构建步骤中将包含在单个JS文件中,并将该文件推送到CDN.这部分工作正常,但我想使用该processContent选项来缩小HTML模板代码,其中包含Undercore模板分隔符(<%...%>替换为{% ... %},<%= ... %>替换为{{ ... }}).
我想使用html-minifier,但它实际上并没有最小化任何东西,显然是因为它试图将模板解析为仅HTML(并且由于模板标记而失败).
是否有任何Node包/功能允许我最小化这种模板?我想在源模板中使用注释和空格,但在生成的构建文件中删除所有不必要的内容.
现在我在我的JST设置上有这个:
processContent: function (content) {
return content
.replace(/^[\x20\t]+/mg, '')
.replace(/[\x20\t]+$/mg, '')
.replace(/^[\r\n]+/, '')
.replace(/[\r\n]*$/, '\n');
},
...
Run Code Online (Sandbox Code Playgroud)
但我想尽可能减少一切,这就是为什么我尝试使用html-minifier.
谢谢!
javascript templates minimize gruntjs underscore.js-templating
我需要检测管理员中某些模型的某些字段何时发生了变化,以便稍后根据更改的字段和这些字段的上一个/当前值发送通知.
我试着用ModelForm和重写save()方法,但形式的self.cleaned_data和seld.instance已有的字段的新值.
嗨伙伴Djangonauts:
我用django-lint检查了我的项目,它产生了:
W:211,16:MyModel: timestamp: Uses superceded auto_now or auto_now_add
Run Code Online (Sandbox Code Playgroud)
在提交信息:
auto_now/auto_now_add not technically deprecated, but they still suck.
Run Code Online (Sandbox Code Playgroud)
为什么他们说auto_now/auto_now_add"吮吸"?使用这两个字段参数实现创建/上次更新的模式没有问题.
这种模式有更好的方法吗?自定义字段类?为什么(如果这种方法更好)它还没有被集成到Django中?
在我的Django模型中,我有两个字段name(常规CharField)和slug一个自定义字段,它根据字段定义中传递的字段名称生成slug,在这种情况下我用name它.
首先,该模型只有该name字段,具有相应的迁移和所有.然后我需要添加slug字段,因此遵循南方惯例,我添加了slug字段unique=False,创建模式迁移,然后创建数据迁移,设置unique=True并为最后一次更改创建另一个迁移.
由于slug的值是在模型保存上生成的,在forwards数据迁移的方法中,我所做的是迭代返回的查询集orm['myapp.MyModel'].objects.all()并save()在每个实例上调用方法.
但是从未产生slug字段的价值.在IPython会话下,我做了同样的事情,但引用模型from myapp.models import MyModel,并且工作.使用一些调试语句,打印type由South的orm dict返回的模型显示真实的类,它似乎不是由南方动态构建的假模型.
slug字段在pre_save方法时创建它的值.如何强制在数据迁移期间调用它?我需要确保值的唯一性,以便在以后的模式迁移中应用索引时,列不包含重复值.
谢谢!
BTW:slug字段类确实定义了south_field_triple所以南方玩得很好.
编辑:请看我的答案.但更像是一个答案,感觉更像是一个黑客.有没有更好/正确的方法来做到这一点?
虽然Django Django还不支持Python 3,但它最终会支持Python,所以我想让我的代码更加"面向未来".
从Python 2.7开始,字符串插值运算符(%)被弃用.我意识到需要翻译的每个字符串都使用%插值语法.在Django文档中没有提到新str.format方法(字符串格式化的"新"官方方式)......
也许存在gettext库的限制,但我不这么认为,因为字符串在.PO文件中看起来相同.
问题是我是否可以使用新的字符串format方法进行翻译.
旧方式:
class Post(models.Model):
title = models.CharField(max_length=50)
date = models.DateField()
# ...
def __unicode__(self):
return _('%(title)s (%(date)s)') % {
'title': self.title,
'date': self.date,
}
Run Code Online (Sandbox Code Playgroud)
"新"方式:
class Post(models.Model):
title = models.CharField(max_length=50)
date = models.DateField()
# ...
def __unicode__(self):
return _('{title} ({date})').format(
title=self.title,
date=self.date,
)
Run Code Online (Sandbox Code Playgroud)
此外,ugettext_lazy并不真正返回字符串,而是Promises仅在需要时评估的对象.
string django internationalization deprecated string-interpolation
是否有可能使这项工作?我原本想看看是否true可以重新定义,然后我看到true实际上是一个关键字.
是否有可能"修复"模式错误并获得"你不能分配给关键字错误"?
fn main() {
let true = false;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
error[E0005]: refutable pattern in local binding: `false` not covered
--> src/main.rs:2:9
|
2 | let true = false;
| ^^^^ pattern `false` not covered
Run Code Online (Sandbox Code Playgroud)
django ×8
python ×3
django-admin ×2
amazon-s3 ×1
css ×1
datetime ×1
deprecated ×1
django-forms ×1
django-south ×1
fonts ×1
gruntjs ×1
html ×1
javascript ×1
keyword ×1
metadata ×1
migration ×1
minimize ×1
pylint ×1
rust ×1
static-files ×1
stream ×1
string ×1
templates ×1
typography ×1
unique-key ×1
url-routing ×1
urlconf ×1