我在自定義小部件的呈現html頁面中有一個javascript代碼。我想移動js代碼來分離js文件。django在自定義小部件中的動態javascript
但是,它必須是動態而非靜態媒體文件。
我寫了一個自定義部件:
class CustomWidget(CustomWidgetBase):
css = {
'all': (
config['custom_css'] +
config['extra_css']
)
}
js = (
config['custom_js'] +
config['extra_js']
)
@property
def media(self):
media = super(CustomWidget, self).media
media.add_css(CustomWidget.css)
media.add_js(CustomWidget.js)
return media
def render(self, name, value, attrs=None):
attrs_for_textarea = attrs.copy()
attrs_for_textarea['hidden'] = 'true'
attrs_for_textarea['id'] += '-textarea'
html = super(CustomWidget, self).render(name, value, attrs_for_textarea)
html += render_to_string(
'app/custom_widget.html',
{
'id': attrs['id'].replace('-', '_'),
'id_src': attrs['id'],
'value': value if value else '',
'settings': json.dumps(self.template_contexts()),
'STATIC_URL': settings.STATIC_URL,
'CSRF_COOKIE_NAME': settings.CSRF_COOKIE_NAME,
}
)
CustomWidget.js += (os.path.join(settings.STATIC_URL, 'app/my.js'),)
return mark_safe(html)
'應用程序/ custom_widget.html' 有JavaScript代碼:
{% load staticfiles %}
<div id='{{ id_src }}'>{{ value|safe }}</div>
<script>
$(function() {
var {{ id }}_textarea = window.document.getElementById('{{ id_src }}-textarea');
... omitted ...
我想移動在「應用程序/ custom_widget.html JavaScript代碼'放入'app/my.js'中,因爲它使得窗口小部件代碼依賴於JavaScript聲明的順序。
因此,'app/my.js'必須使用Django視圖傳遞的值動態生成。我想將'app/my.js'放在頁面底部。
謝謝。
你有什麼問題嗎? –
@JahongirRahmonov我想將app/custom_widget.html中的javascript代碼移動到app/my.js文件中。 – nasiajai