"# Tipps und Tricks für die Arbeit mit HTML-Fragmenten\n",
"\n",
"Wenn die HTML-Fragmente größer werden, empfehlen sich eine andere Schreibweise und Formatierung für das HTML. Aber auch der Umgang mit Platzhaltern kann optimiert werden."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"from IPython.display import HTML"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## HTML-Fragmente übersichtlich schreiben\n",
"\n",
"Bisher sehen unsere HTML-Fragmente häufig so aus:"
"Ziel sollte es sein, dass die HTML-Fragmente im Python-Kontext so notiert werden, wie sie auch in einem statischen Dokument zu finden wären. Die folgende Schreibweise macht das möglich. Auf das Syntax Highlighting des HTMLs muss leider verzichtet werden, aber - man kann nicht alles haben."
"## Benannte Platzhalter verwenden für `format()`\n",
"\n",
"Bisher verwenden wir die Methode `format()` mit Platzhaltern, die **in der Reihenfolge ihres Vorkommens** bedient werden müssen. Das führt bei vielen Platzhaltern zu Unübersichtlichkeit. Ein besserer Ansatz ist die Arbeit mit [**benannten Platzhaltern**](https://docs.python.org/3/library/string.html#format-examples)."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"template = \"\"\"\n",
" <div class=\"{css_class}\">\n",
" <a href=\"{link_target}\">Linkziel</a>\n",
" </div>\n",
"\"\"\""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Die benannten Platzhalter können durch Argumente beim Aufruf der Methode `format()` angesprochen werden. Dabei ist die Reihenfolge der Argumente beliebig."
"Noch mehr Übersichtlichkeit erreichen wir durch die listenartige Formatierung der Argumente in der Methode."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"html = template.format(\n",
" link_target=\"http://heise.de\", \n",
" css_class=\"meine-klasse\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <div class=\"meine-klasse\">\n",
" <a href=\"http://heise.de\">Linkziel</a>\n",
" </div>\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(html)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"toc_cell": false,
"toc_position": {},
"toc_section_display": "block",
"toc_window_display": false
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
%% Cell type:markdown id: tags:
# Tipps und Tricks für die Arbeit mit HTML-Fragmenten
Wenn die HTML-Fragmente größer werden, empfehlen sich eine andere Schreibweise und Formatierung für das HTML. Aber auch der Umgang mit Platzhaltern kann optimiert werden.
Ziel sollte es sein, dass die HTML-Fragmente im Python-Kontext so notiert werden, wie sie auch in einem statischen Dokument zu finden wären. Die folgende Schreibweise macht das möglich. Auf das Syntax Highlighting des HTMLs muss leider verzichtet werden, aber - man kann nicht alles haben.
%% Cell type:code id: tags:
``` python
template="""
<div class="meine-klasse">
<a href="http://www.linkziel.de">Linkziel</a>
</div>
"""
```
%% Cell type:markdown id: tags:
## Benannte Platzhalter verwenden für `format()`
Bisher verwenden wir die Methode `format()` mit Platzhaltern, die **in der Reihenfolge ihres Vorkommens** bedient werden müssen. Das führt bei vielen Platzhaltern zu Unübersichtlichkeit. Ein besserer Ansatz ist die Arbeit mit [**benannten Platzhaltern**](https://docs.python.org/3/library/string.html#format-examples).
%% Cell type:code id: tags:
``` python
template="""
<div class="{css_class}">
<a href="{link_target}">Linkziel</a>
</div>
"""
```
%% Cell type:markdown id: tags:
Die benannten Platzhalter können durch Argumente beim Aufruf der Methode `format()` angesprochen werden. Dabei ist die Reihenfolge der Argumente beliebig.