Sócmhainní Foirm (an aicme ``Meáin ``)Link to this heading

Teastaíonn níos mó ná HTML amháin ar fhoirm gréasáin tarraingteach agus éasca le húsáid a rindreáil - teastaíonn bileoga stíl CSS uaidh freisin, agus más mian leat giuirléidí mhaisiúla a úsáid, b'fhéidir go mbeidh ort roinnt JavaScript a áireamh ar gach leathanach freisin. Braithfidh an teaglaim cruinn de CSS agus JavaScript atá ag teastáil d'aon leathanach ar leathanach ar leith ar na giuirléidí atá in úsáid ar an leathanach sin.

Seo a dtagann sainmhínithe sócmhainní isteach. Ligeann Django duit comhaid éagsúla - cosúil le bileoga stíle agus scripteanna - a cheangal leis na foirmeacha agus na giuirléidí a dteastaíonn na sócmhainní sin uathu. Mar shampla, más mian leat féilire a úsáid chun DateFields a léiriú, is féidir leat giuirléid Féilire saincheaptha a shainiú. Is féidir an giuirléid seo a bheith bainteach ansin leis an CSS agus JavaScript atá riachtanach chun an féilire a rinneadh. Nuair a úsáidtear an giuirléid Féilire ar fhoirm, tá Django in ann na comhaid CSS agus JavaScript atá ag teastáil a aithint, agus liosta na n-ainmneacha comhaid a sholáthar i bhfoirm atá oiriúnach le cuimsiú ar do leathanach gréasáin.

Sócmhainní mar shainiú statachLink to this heading

Is é an bealach is éasca le sócmhainní a shainiú mar shainiú statach. Ag baint úsáide as an modh seo, is aicme ``Meáin ``istigh é an dearbhú. Sainmhíníonn airíonna an aicme istigh na riachtanais.

Seo sampla:

Code
from django import forms


class CalendarWidget(forms.TextInput):
    class Media:
        css = {
            "all": ["pretty.css"],
        }
        js = ["animations.js", "actions.js"]

Sainmhíníonn an cód seo CalendarWidget, a bheidh bunaithe ar TextInput. Gach uair a úsáidtear an CalendarWidget ar fhoirm, treorófar an fhoirm sin chun an comhad CSS pretty.css`, agus na comhaid JavaScript ``animations.js ``agus `actions.js a áireamh.

Déantar an sainmhíniú statach seo a thiontú ag am rith ina mhaoin giuirléid darb ainm meáin ``. Is féidir liosta na sócmhainní do shampla ``CalendarWidget a aisghabháil tríd an maoin seo:

Python console
>>> w = CalendarWidget()
>>> print(w.media)
<link href="https://static.example.com/pretty.css" media="all" rel="stylesheet">
<script src="https://static.example.com/animations.js"></script>
<script src="https://static.example.com/actions.js"></script>

Seo liosta de na roghanna ``Meáin ``féideartha go léir. Níl aon roghanna riachtanacha ann.

cssLink to this heading

Foclóir ag cur síos ar na comhaid CSS a theastaíonn le haghaidh cineálacha éagsúla meán aschuir.

Ba chóir go mbeadh na luachanna sa fhoclóir ina feadán/liosta d'ainmneacha comhaid. Féach: tagairt: `an chuid ar chosáin <form-asset-paths>`le haghaidh sonraí maidir le conas cosáin chuig na comhaid seo a shonrú.

Is iad na heochracha sa fhoclóir na cineálacha meán aschuir. Is iad seo na cineálacha céanna a nglacann comhaid CSS leo i ndearbhú meán: 'gach', 'aural', 'braille', 'cabhraithe', 'láimhe', 'priontáil', 'teilgean', 'scáileán', 'tty' agus 'tv'. Más gá duit bileoga stíl éagsúla a bheith agat do chineálacha éagsúla meán, tabhair liosta de chomhaid CSS do gach meán aschuir. Chuirfeadh an sampla seo a leanas dhá rogha CSS ar fáil - ceann don scáileán, agus ceann le haghaidh priontála:

Code
class Media:
    css = {
        "screen": ["pretty.css"],
        "print": ["newspaper.css"],
    }

Má tá grúpa comhaid CSS oiriúnach do chineálacha meán aschuir iolracha, is féidir leis an eochair foclóra a bheith ina liosta scartha camóg de chineálacha meán aschuir. Sa sampla seo a leanas, beidh na riachtanais mheán céanna ag teilifíse agus teilgeoirí:

Code
class Media:
    css = {
        "screen": ["pretty.css"],
        "tv,projector": ["lo_res.css"],
        "print": ["newspaper.css"],
    }

Dá ndéanfaí an sainmhíniú CSS deireanach seo a léiriú, bheadh sé ina HTML seo a leanas:

Django template
<link href="https://static.example.com/pretty.css" media="screen" rel="stylesheet">
<link href="https://static.example.com/lo_res.css" media="tv,projector" rel="stylesheet">
<link href="https://static.example.com/newspaper.css" media="print" rel="stylesheet">

JSLink to this heading

Tuple ag cur síos ar na comhaid JavaScript riachtanacha. Féach: tagairt: `an chuid ar chosáin <form-asset-paths>`le haghaidh sonraí maidir le conas cosáin chuig na comhaid seo a shonrú.

Script objectsLink to this heading

class Script(src, **attributes)Link to this definition

Represents a script file.

The first parameter, src, is the string path to the script file. See the section on paths for details on how to specify paths to these files.

The optional keyword arguments, **attributes, are HTML attributes that are set on the rendered <script> tag.

See Cosáin mar rudaí for usage examples.

``leathnú ``Link to this heading

Iompar oidhreachta a shainmhíníonn boolean le haghaidh dearbhuithe ``Meáin ``.

De réir réamhshocraithe, beidh aon rud a úsáideann sainmhíniú statach ``Meáin ``oidhreacht na sócmhainní go léir a bhaineann leis an tuismitheoir giuirléid Tarlaíonn sé seo beag beann ar an gcaoi a shainmhíníonn an tuismitheoir Mar shampla, dá ndéanfaimis ár ngiuirléid Féilire bunúsach a leathnú ón sampla thuas:

Python console
>>> class FancyCalendarWidget(CalendarWidget):
...     class Media:
...         css = {
...             "all": ["fancy.css"],
...         }
...         js = ["whizbang.js"]
...

>>> w = FancyCalendarWidget()
>>> print(w.media)
<link href="https://static.example.com/pretty.css" media="all" rel="stylesheet">
<link href="https://static.example.com/fancy.css" media="all" rel="stylesheet">
<script src="https://static.example.com/animations.js"></script>
<script src="https://static.example.com/actions.js"></script>
<script src="https://static.example.com/whizbang.js"></script>

Oidhreann an giuirléid FancyCalendar na sócmhainní go léir óna ghuirléid tuismitheora Mura dteastaíonn uait go mbeadh Meáin ``oidhreachta ar an mbealach seo, cuir dearbhú ``Extend=False leis an dearbhú Meáin:

Python console
>>> class FancyCalendarWidget(CalendarWidget):
...     class Media:
...         extend = False
...         css = {
...             "all": ["fancy.css"],
...         }
...         js = ["whizbang.js"]
...

>>> w = FancyCalendarWidget()
>>> print(w.media)
<link href="https://static.example.com/fancy.css" media="all" rel="stylesheet">
<script src="https://static.example.com/whizbang.js"></script>

<dynamic-property>Má theastaíonn níos mó smachta uait ar oidhreacht, sainmhínigh do shócmhainní ag baint úsáide as a:ref: `maoin dinimiciúil `. Tugann airíonna dinimiciúla smacht iomlán duit ar na comhaid atá oidhreachta, agus cé nach bhfuil.

``Meáin ``mar mhaoin dinimiciúilLink to this heading

Más gá duit ionramháil níos sofaisticiúla a dhéanamh ar riachtanais sócmhainní, is féidir leat an maoin meáin ``a shainiú go díreach. Déantar é seo trí mhaoin giuirléid a shainiú a thugann sampla de `Forms.Media ar ais. Glacann an tógálaí le haghaidh Forms.Media` argóintí eochairfhocal css agus js` sa fhormáid chéanna leis an bhformáid a úsáidtear i sainmhíniú meán statach.

Mar shampla, d'fhéadfaí an sainmhíniú statach dár nGiuirléid Féilire a shainiú ar bhealach dinimiciúil freisin:

Code
class CalendarWidget(forms.TextInput):
    @property
    def media(self):
        return forms.Media(
            css={"all": ["pretty.css"]}, js=["animations.js", "actions.js"]
        )

Féach an chuid ar Réadaí Meáin `_ le haghaidh tuilleadh sonraí maidir le conas luachanna tuairisceáin a thógáil d'airíonna dinimiciúla ``meáin `.

Cosáin i sainmhínithe sócmhLink to this heading

Cosáin mar teaghráinLink to this heading

Is féidir cosáin teaghrán a úsáidtear chun sócmhainní a shonrú a bheith coibhneasta Má thosaíonn cosán le /`, http: //` nó https: //, léirmhínítear é mar chonair iomlán, agus fágfar é mar atá. Déanfar gach cosán eile a réamhshocrú le luach an réimír chuí. Má tá an aip: mod: django.contrib.staticfiles suiteáilte, úsáidfear é chun sócmhainní a sheirbheáil.

Cibé an úsáideann tú: mod: django.contrib.staticfiles nó nach bhfuil, teastaíonn socruithe an:setting: STATIC_URL agus:setting: STATIC_ROOT chun leathanach gréasáin iomlán a rinneadh.

Chun an réimír iomchuí le húsáid a fháil, seiceálfaidh Django an bhfuil an socrú: socrú: STATIC_URL `None ``agus tiocfaidh ar ais go huathoibríoch ag baint úsáid:setting: `MEDIA_URL`. Mar shampla, más é an: socrú: `MEDIA_URL` do do shuíomh ```https://uploads.example.com/ '``agus:setting: `STATIC_URL` ``None:

Python console
>>> from django import forms
>>> class CalendarWidget(forms.TextInput):
...     class Media:
...         css = {
...             "all": ["/css/pretty.css"],
...         }
...         js = ["animations.js", "https://othersite.com/actions.js"]
...

>>> w = CalendarWidget()
>>> print(w.media)
<link href="/css/pretty.css" media="all" rel="stylesheet">
<script src="https://uploads.example.com/animations.js"></script>
<script src="https://othersite.com/actions.js"></script>

Ach más:setting: STATIC_URL is `https://static.example.com/ ':

Python console
>>> w = CalendarWidget()
>>> print(w.media)
<link href="/css/pretty.css" media="all" rel="stylesheet">
<script src="https://static.example.com/animations.js"></script>
<script src="https://othersite.com/actions.js"></script>

Nó má tá: mod: ~django.contrib.staticfiles cumraithe ag baint úsáide as an: class: ~django.contrib.staticFiles.Storage.ManifestStaticFilesStorage:

Python console
>>> w = CalendarWidget()
>>> print(w.media)
<link href="/css/pretty.css" media="all" rel="stylesheet">
<script src="https://static.example.com/animations.27e20196a850.js"></script>
<script src="https://othersite.com/actions.js"></script>

Cosáin mar rudaíLink to this heading

Assets may also be object-based, using Script. Furthermore, these allow you to pass custom HTML attributes:

Code
class Media:
    js = [
        Script(
            "https://cdn.example.com/something.min.js",
            **{
                "crossorigin": "anonymous",
                "async": True,
            },
        ),
    ]

If this Media definition were to be rendered, it would become the following HTML:

Django template
<script src="https://cdn.example.com/something.min.js"
        crossorigin="anonymous"
        async>
</script>

Rudaí ``Meáin ``Link to this heading

Nuair a fhiosraíonn tú tréith media ``de ghuirléid foirm, is é an luach a chuirtear ar ais réad ``Forms.Media. Mar a chonaic muid cheana féin, is é léiriú teaghrán réad `Meáin ``an HTML a theastaíonn chun na comhaid ábhartha a áireamh sa bhloc<head> `de do leathanach HTML.

Mar sin féin, tá roinnt airíonna suimiúla eile ag rudaí ``Meáin ``.

Fo-thacair sócmhainníLink to this heading

Mura dteastaíonn uait ach comhaid de chineál áirithe, is féidir leat an t-oibreoir suibscríbe a úsáid chun meán spéise a scagadh amach. Mar shampla:

Python console
>>> w = CalendarWidget()
>>> print(w.media)
<link href="https://static.example.com/pretty.css" media="all" rel="stylesheet">
<script src="https://static.example.com/animations.js"></script>
<script src="https://static.example.com/actions.js"></script>

>>> print(w.media["css"])
<link href="https://static.example.com/pretty.css" media="all" rel="stylesheet">

Nuair a úsáideann tú an t-oibreoir suibscríbe, is é an luach a chuirtear ar ais ná réad nua ``Meáin ``-- ach ceann nach bhfuil ach na meáin spéise ann.

Rud ``Meáin ``a chomhcheangalLink to this heading

Is féidir rudaí Meáin ``a chur le chéile freisin. Nuair a chuirtear dhá réad ``Meáin ``leis, aontas na sócmhainní a shonraíonn an rud sa réad ``Meáin mar thoradh air sin:

Python console
>>> from django import forms
>>> class CalendarWidget(forms.TextInput):
...     class Media:
...         css = {
...             "all": ["pretty.css"],
...         }
...         js = ["animations.js", "actions.js"]
...

>>> class OtherWidget(forms.TextInput):
...     class Media:
...         js = ["whizbang.js"]
...

>>> w1 = CalendarWidget()
>>> w2 = OtherWidget()
>>> print(w1.media + w2.media)
<link href="https://static.example.com/pretty.css" media="all" rel="stylesheet">
<script src="https://static.example.com/animations.js"></script>
<script src="https://static.example.com/actions.js"></script>
<script src="https://static.example.com/whizbang.js"></script>

Ordú sócmhainníLink to this heading

Is minic a bhíonn an t-ord ina gcuirtear sócmhainní isteach sa DOM tábhachtach. Mar shampla, d'fhéadfadh go mbeadh script agat a bhraitheann ar jQuery. Dá bhrí sin, déanann rudaí Meáin ``a chomhcheangal iarracht an t-ord coibhneasta ina sainmhínítear sócmhainní i ngach rang ``Meáin a chaomhnú.

Mar shampla:

Python console
>>> from django import forms
>>> class CalendarWidget(forms.TextInput):
...     class Media:
...         js = ["jQuery.js", "calendar.js", "noConflict.js"]
...
>>> class TimeWidget(forms.TextInput):
...     class Media:
...         js = ["jQuery.js", "time.js", "noConflict.js"]
...
>>> w1 = CalendarWidget()
>>> w2 = TimeWidget()
>>> print(w1.media + w2.media)
<script src="https://static.example.com/jQuery.js"></script>
<script src="https://static.example.com/calendar.js"></script>
<script src="https://static.example.com/time.js"></script>
<script src="https://static.example.com/noConflict.js"></script>

Mar thoradh ar réadanna Meáin ``a chomhcheangal le sócmhainní in ord contrártha bíonn ``MediaOrderConflictwarning mar thoradh ar MediaOrderConflictwarning.

``Meáin ``ar FhoirmeachaLink to this heading

Ní hiad giuirléidí na rudaí amháin a bhféadann sainmhínithe meáin ``a bheith acu - is féidir le foirmeacha ``meáin a shainiú freisin. Tá na rialacha maidir le sainmhínithe ``meáin ``ar fhoirmeacha mar an gcéanna leis na rialacha maidir le giuirléidí: is féidir le dearbhuithe a bheith statach nó dinimiciúil; tá rialacha cosán agus oidhreachta do na dearbhuithe sin díreach mar an gcéanna.

Beag beann an sainmhíníonn tú dearbhú meáin ``, *gach réad Foirme* maoin ``meáin ag rudaí foirme uach*. Is é an luach réamhshocraithe don mhaoin seo mar thoradh ar na sainmhínithe ``meáin ``a chur leis do gach giuirléid atá mar chuid den fhoirm:

Python console
>>> from django import forms
>>> class ContactForm(forms.Form):
...     date = DateField(widget=CalendarWidget)
...     name = CharField(max_length=40, widget=OtherWidget)
...

>>> f = ContactForm()
>>> f.media
<link href="https://static.example.com/pretty.css" media="all" rel="stylesheet">
<script src="https://static.example.com/animations.js"></script>
<script src="https://static.example.com/actions.js"></script>
<script src="https://static.example.com/whizbang.js"></script>

Más mian leat sócmhainní breise a cheangal le foirm - mar shampla, CSS le haghaidh leagan amach foirme - cuir dearbhú ``Meáin ``leis an bhfoirm:

Python console
>>> class ContactForm(forms.Form):
...     date = DateField(widget=CalendarWidget)
...     name = CharField(max_length=40, widget=OtherWidget)
...     class Media:
...         css = {
...             "all": ["layout.css"],
...         }
...

>>> f = ContactForm()
>>> f.media
<link href="https://static.example.com/pretty.css" media="all" rel="stylesheet">
<link href="https://static.example.com/layout.css" media="all" rel="stylesheet">
<script src="https://static.example.com/animations.js"></script>
<script src="https://static.example.com/actions.js"></script>
<script src="https://static.example.com/whizbang.js"></script>