Introduction
Widgets can declare their CSS and JavaScript dependencies using the Media class.
Key Concepts
- Media class: Declares CSS/JS deps on widgets.
Real World Context
Widgets need their own CSS/JS. Media class handles deduplication.
Deep Dive
Defining Widget Media
pythonclass DatePickerWidget(forms.DateInput): class Media: css = {'all': ('css/datepicker.css',)} js = ('js/datepicker.js',) def __init__(self, attrs=None): default_attrs = {'class': 'datepicker'} if attrs: default_attrs.update(attrs) super().__init__(attrs=default_attrs)
Using Media in Templates
html<head>{{ form.media.css }}</head> <body> {{ form.as_p }} {{ form.media.js }} </body>
Common Pitfalls
- Wrong placement -- Separate css and js.
- Missing static config -- Paths use STATIC_URL.
Best Practices
- Media on widgets -- Not forms.
- Use tuples -- Convention.
Summary
Use Media class for widget dependencies. Include form.media in templates.