├── .github └── workflows │ └── main.yml ├── .gitignore ├── LICENSE ├── README.md ├── books.yml ├── bookshelf.py ├── covers ├── beautiful.jpg ├── beginningjavascript.jpg ├── cleancode.jpg ├── computer-vision.jpg ├── cracking-codes.jpg ├── cssmistrovstvi.jpg ├── cython.jpg ├── data-analysis.jpg ├── data-science-from-scratch.jpg ├── data-science-handbook.jpg ├── data-wrangling.jpg ├── designing-data-intensive-applications.jpg ├── django-definitive-guide.jpg ├── dreaming.jpg ├── effective-pycharm.jpg ├── erlang-learn.jpg ├── fedora-guide-cz.jpg ├── flask-web-dev.jpg ├── grayhat.jpg ├── hackers_painters.jpg ├── hackingsecretciphers.jpg ├── hello-web-app-intermediate.jpg ├── hello-web-app.jpg ├── hello-web-design.jpg ├── high-performance-django.jpg ├── how-learning-works.jpg ├── javascript-the-good-parts.jpg ├── kentbecktdd.jpg ├── kivy.jpg ├── land-of-lisp.jpg ├── latex-pro-zacatecniky.jpg ├── learning-python.jpg ├── lightweight-django.jpg ├── microia.jpg ├── mysql-okamzite.jpg ├── mysqlguide.jpg ├── mysqlnutshell.jpg ├── networkfoundations.jpg ├── nlpp.jpg ├── open-organization.jpg ├── ploneguide.jpg ├── ponormese.jpg ├── practical-django-projects.jpg ├── pragmaticerlang.jpg ├── pro-django.jpg ├── pro-git.jpg ├── pro-hackery.jpg ├── processing-py.jpg ├── promysql.jpg ├── pruvodce-labyrintem-algoritmu.jpg ├── py3.jpg ├── py3porting.jpg ├── python-101.jpg ├── python-cookbook.jpg ├── python-for-kids.jpg ├── python-prirucka.jpg ├── python-projects-for-kids.jpg ├── python-tricks.jpg ├── python.jpg ├── raspi-cookbook.jpg ├── risky-iot.jpg ├── sql-28-dni.jpg ├── sqliteguide.jpg ├── sqlperf.jpg ├── team-geek.jpg ├── testing-goat.jpg ├── tex-book-naruby.jpg ├── text-adventure.jpg ├── think-python.jpg ├── thoughtful-machine-learning.jpg ├── two-scoops-1-5.jpg ├── two-scoops-1-6.jpg ├── violent.jpg ├── wah.jpg ├── xp.jpg ├── zaciname-programovat.jpg └── zelvi-grafika.jpg ├── requirements.txt ├── static ├── CSS │ ├── bootstrap.min.css │ └── style.css ├── pyvec.svg ├── pyvo.png ├── script.js ├── vue.js └── vue.min.js └── templates ├── book.html ├── borrow_issue.md ├── index.html ├── info.html └── layout.html /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Main 2 | on: 3 | push: 4 | pull_request: 5 | workflow_dispatch: 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Set up Python 3.10 12 | uses: actions/setup-python@v2 13 | with: 14 | python-version: "3.10" 15 | - name: Install dependencies 16 | run: | 17 | python -m pip install -r requirements.txt 18 | - name: Freeze HTML 19 | run: | 20 | python bookshelf.py freeze -v 21 | - if: ${{ github.ref == 'refs/heads/main' }} 22 | name: Deploy 23 | run: | 24 | python bookshelf.py deploy --no-freeze --push 25 | env: 26 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | __venv__/ 3 | /_build/ 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 bookshelf contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Knihovnička 3 | 4 | ## Jak to funguje? 5 | 6 | * Pokud si chceš půjčit knihu, založ na to na GitHubu [Issue]. 7 | * V názvu *issue* uveď jméno knihy. 8 | * V popisku *issue* uveď, kde chceš knihu předat. Standardně se knihy předávají na Pyvu (v různých městech – viz [https://pyvo.cz/]). 9 | * Standardní doba výpůjčky je jeden měsíc (do dalšího Pyva). 10 | * Pokud máš knihu, kterou chceš zařadit do knihovny, pošli pull request, který ji tam zařazuje. 11 | * Knihu můžeš buď nechat u sebe, nebo ji na některém Pyvu předat Petrovi ([@encukou]), který ji pak bude vozit na Pyva. 12 | * Hledáme knihy, které se týkají Pythonu a přidružených neutrálních technologií (např. databází), nebo programování či open-source obecně 13 | * Půjčování je dobrovolná činnost založená na důvěře. Pokud se knížka ztratí, bude nám to líto a budeme se snažit ji získat zpátky, ale zaručit nemůžeme nic. 14 | 15 | Pokud nemáš účet na GitHubu, nebo není něco jasné, ozvi se na [encukou@gmail.com]. 16 | Začátečníci jsou vítáni! 17 | 18 | ## How does this work? 19 | 20 | * If you want to borrow a book, open an [Issue] on GitHub. 21 | * Mention the name of the book in the issue name 22 | * In the issue comment, say where you'll pick the book up. Standard locations are the Pyvo meetups – see viz [https://pyvo.cz/] 23 | * The usual lease time is one month (until the next meetup). 24 | * If you have a book you'd like to add, send a pull request adding it! 25 | * You can either keep the book, or give it to Petr ([@encukou]) who can bring it to other Pyvo meetups in the country. 26 | * We're looking for books about either Python and related language-neutral technologies (like databases), or programming and open-source in general. 27 | * Lending is a volunteer effort based on trust. We have no legal responsibility for books you donate. 28 | 29 | [Issue]: https://github.com/pyvec/bookshelf/issues 30 | [https://pyvo.cz/]: https://pyvo.cz/ 31 | [@encukou]: https://github.com/encukou 32 | [encukou@gmail.com]: mailto:encukou@gmail.com 33 | 34 | 35 | 36 | 37 | ### Spuštění webu lokálně v PC 38 | 39 | Ve virtuálním prostředí s Pythhonem 3.6 (nebo vyšším) spusť: 40 | 41 | $ python -m pip install -r requirements.txt 42 | 43 | Ve stejném virtuálním prostředí spusť na Linuxu/macOS: 44 | 45 | $ export PYTHONPATH=. 46 | 47 | nebo na Windows: 48 | 49 | > set PYTHONPATH=. 50 | 51 | a pak (na všech systémech): 52 | 53 | $ python bookshelf.py serve 54 | 55 | Stránky se zpřístupní na adrese `http://127.0.0.1:8003/`. 56 | Změny v kódu se projeví po obnovení stránky v prohlížeči. 57 | 58 | ### Přídání knihy: 59 | do `books.yml` přidej: 60 | ``` 61 | nazev-knihy: 62 | name: Název knihy 63 | author: Autor knihy 64 | description: Krátký popis knihy 65 | copies: 66 | - owner: "@jmenonagithubu" - kdo je majitel knihy 67 | keeper: "@jmenonagithubu" - kdo se o knihu stará 68 | current: "@jmenonagithubu" - kdo má knihu půjčenou 69 | borrowed: yyyy-mm-dd - od kdy ji má půjčenou 70 | signed: True - vyplnit, jen když je podepsaná 71 | url: odkaz na další informace o knize 72 | language: 73 | - Anglicky/Česky 74 | tags: 75 | - doplň všechny vhodné tagy (Python, Data, Ostatní, SQL, Testování, Web, Začátečník) 76 | ``` 77 | 78 | ## Příklad knihy: 79 | ``` 80 | two-scoops-1-5: 81 | name: Two Scoops of Django (1.5) 82 | author: Daniel Greenfeld & Audrey Roy 83 | description: Best Practices for Django 84 | copies: 85 | - owner: "@honzakral" 86 | keeper: "@encukou" 87 | url: https://www.twoscoopspress.com/products/two-scoops-of-django-1-5 88 | language: 89 | - Anglicky 90 | tags: 91 | - Web 92 | - Python 93 | ``` 94 | 95 | do složky `covers` dej obrázek přebalu ve formátu `nazev-knihy.jpg/png` název musí být stejný jako v ymlu. 96 | -------------------------------------------------------------------------------- /books.yml: -------------------------------------------------------------------------------- 1 | ponormese: 2 | name: Ponořme se do Python(u) 3 3 | author: Mark Pilgrim 4 | copies: 5 | - owner: "@hroncok" 6 | - owner: "@encukou" 7 | 8 | url: http://diveintopython3.py.cz/index.html 9 | language: 10 | - Česky 11 | tags: 12 | - Python 13 | - Začátečník 14 | 15 | two-scoops-1-5: 16 | name: Two Scoops of Django (1.5) 17 | author: Daniel Greenfeld & Audrey Roy 18 | description: Best Practices for Django 19 | copies: 20 | - owner: "@honzakral" 21 | keeper: "@encukou" 22 | url: https://www.twoscoopspress.com/products/two-scoops-of-django-1-5 23 | language: 24 | - Anglicky 25 | tags: 26 | - Web 27 | - Python 28 | 29 | two-scoops-1-6: 30 | name: Two Scoops of Django (1.6) 31 | author: Daniel Greenfeld & Audrey Roy 32 | description: Best Practices for Django 33 | copies: 34 | - owner: "@encukou" 35 | url: https://www.twoscoopspress.com/products/two-scoops-of-django-1-6 36 | language: 37 | - Anglicky 38 | tags: 39 | - Web 40 | - Python 41 | 42 | python-cookbook: 43 | name: Python Cookbook 44 | author: D. Beazley & B. K. Jones 45 | description: Recipes for mastering Python 3 46 | copies: 47 | - owner: "@encukou" 48 | url: http://shop.oreilly.com/product/0636920027072.do 49 | language: 50 | - Anglicky 51 | tags: 52 | - Python 53 | 54 | testing-goat: 55 | name: Test-Driven Development with Python 56 | author: Harry J. W. Percival 57 | description: "Obey the Testing Goat: Using Django, Selenium, and Javascript." 58 | copies: 59 | - owner: "@encukou" 60 | signed: True 61 | url: http://www.obeythetestinggoat.com/ 62 | language: 63 | - Anglicky 64 | tags: 65 | - Web 66 | - Testování 67 | - Python 68 | 69 | data-wrangling: 70 | name: Data Wrangling with Python 71 | author: Jacqueline Kazil & Katharine Jarmul 72 | description: Tips and Tools to Make Your Life Easier 73 | copies: 74 | - owner: "@encukou" 75 | signed: True 76 | current: Ivča Jelínková (PyLadies Brno) 77 | borrowed: 2019-05-20 78 | url: http://shop.oreilly.com/product/0636920032861.do 79 | language: 80 | - Anglicky 81 | tags: 82 | - Data 83 | - Python 84 | 85 | 86 | data-analysis: 87 | name: Python for Data Analysis 88 | author: Wes McKinney 89 | description: Data Wrangling with Pandas, NumPy, and IPython 90 | copies: 91 | - owner: "@encukou" 92 | current: "@rkuska" 93 | borrowed: 2015-11-15 94 | url: http://shop.oreilly.com/product/0636920023784.do 95 | language: 96 | - Anglicky 97 | tags: 98 | - Data 99 | - Python 100 | 101 | hello-web-app: 102 | name: Hello Web App 103 | author: Tracy Osborn 104 | description: Learn How to Build a Web App 105 | copies: 106 | - owner: "@encukou" 107 | - owner: "@encukou" 108 | url: https://hellowebbooks.com/learn-django/ 109 | language: 110 | - Anglicky 111 | tags: 112 | - Web 113 | - Začátečník 114 | - Python 115 | 116 | hello-web-app-intermediate: 117 | name: Hello Web App 118 | author: Tracy Osborn 119 | description: Intermediate Concepts 120 | copies: 121 | - owner: "@encukou" 122 | - owner: "@encukou" 123 | url: https://hellowebbooks.com/django-intermediate-concepts/ 124 | language: 125 | - Anglicky 126 | tags: 127 | - Web 128 | - Začátečník 129 | - Python 130 | 131 | hello-web-design: 132 | name: Hello Web Design 133 | author: Tracy Osborn 134 | description: Design fundamentals and shortcuts for non-designers 135 | copies: 136 | - owner: "@encukou" 137 | url: https://hellowebbooks.com/learn-design/ 138 | language: 139 | - Anglicky 140 | tags: 141 | - Web 142 | - Ostatní 143 | 144 | #flask-web-dev: 145 | # name: Flask Web Development 146 | # author: Miguel Grinberg 147 | # description: Developing Web Applications with Python 148 | # copies: 149 | # - owner: "@encukou" 150 | # url: http://flaskbook.com/ 151 | # language: 152 | # - Anglicky 153 | # tags: 154 | # - Web 155 | # - Python 156 | 157 | raspi-cookbook: 158 | name: Raspberry Pi Cookbook 159 | author: Simon Monk 160 | copies: 161 | - owner: "@encukou" 162 | 163 | url: http://shop.oreilly.com/product/0636920029595.do 164 | language: 165 | - Anglicky 166 | tags: 167 | - Ostatní 168 | 169 | hackers_painters: 170 | name: "Hackers and Painters: Big Ideas from the Computer Age" 171 | author: Paul Graham 172 | description: Sbírka esejí člověka, který později založil Y Combinator. 173 | copies: 174 | - owner: "@encukou" 175 | url: http://www.amazon.com/Hackers-Painters-Big-Ideas-Computer/dp/1449389554 176 | language: 177 | - Anglicky 178 | tags: 179 | - Ostatní 180 | 181 | kivy: 182 | name: Creating Apps in Kivy 183 | author: Dusty Phillips 184 | description: Praktický návod, jak vytvořit mobilní aplikaci v Pythonu. Vhodné pro začátečníky. 185 | copies: 186 | - owner: "@encukou" 187 | url: http://shop.oreilly.com/product/0636920032595.do 188 | language: 189 | - Anglicky 190 | tags: 191 | - Začátečník 192 | - Python 193 | 194 | cython: 195 | name: Cython - A guide for Python programmers 196 | author: Kurt W. Smith 197 | description: Vydání Leden 2015 198 | copies: 199 | - owner: "@tjanovsky" 200 | url: http://shop.oreilly.com/product/0636920033431.do 201 | language: 202 | - Anglicky 203 | tags: 204 | - Python 205 | 206 | pro-git: 207 | name: Pro Git 208 | author: Scott Chacon 209 | copies: 210 | - owner: "@encukou" 211 | current: Eva Milovská (PyLadies Brno) 212 | borrowed: 2019-05-20 213 | url: https://knihy.nic.cz/#ProGit 214 | language: 215 | - Česky 216 | tags: 217 | - Ostatní 218 | 219 | pruvodce-labyrintem-algoritmu: 220 | name: Průvodce labyrintem algoritmů 221 | author: Martin Mareš, Tomáš Valla 222 | copies: 223 | - owner: "@encukou" 224 | url: https://knihy.nic.cz/#pruvodce 225 | language: 226 | - Česky 227 | tags: 228 | - Ostatní 229 | 230 | team-geek: 231 | name: Team Geek 232 | author: Brian W. Fitzpatrick, Ben Collins-Sussman 233 | description: A Software Developer's Guide to Working Well with Others 234 | copies: 235 | - owner: "@yedpodtrzitko" 236 | current: "@vahalova" 237 | borrowed: 2019-03-20 238 | url: http://shop.oreilly.com/product/0636920018025.do 239 | language: 240 | - Anglicky 241 | tags: 242 | - Ostatní 243 | 244 | open-organization: 245 | name: The Open Organization 246 | author: Jim Whitehurst 247 | copies: 248 | - owner: "@encukou" 249 | url: https://www.redhat.com/en/explore/the-open-organization-book?intcmp=70160000000x2U0AAI 250 | language: 251 | - Anglicky 252 | tags: 253 | - Ostatní 254 | 255 | #py3: 256 | # name: Python 3 - Výukový kurz 257 | # author: Mark Summerfield 258 | # description: Bohužel jediná trochu aktuální kniha která se u nás dala koupit. 259 | # copies: 260 | # - owner: "" 261 | # url: http://knihy.cpress.cz/python-3.html 262 | # language: 263 | # - Česky 264 | # tags: 265 | # - Python 266 | 267 | py3porting: 268 | name: Porting to Python 3 269 | author: Lennart Regebro 270 | description: Praktický návod na portování na Python 3 271 | copies: 272 | - owner: "@honzakral" 273 | keeper: "@encukou" 274 | - owner: "@honzakral" 275 | keeper: "@encukou" 276 | - owner: "@encukou" 277 | - owner: "@yedpodtrzitko" 278 | keeper: "@encukou" 279 | url: http://python3porting.com/ 280 | language: 281 | - Anglicky 282 | tags: 283 | - Python 284 | 285 | #data-science-handbook: 286 | # name: Python Data Science Handbook 287 | # author: Jake VanderPlas 288 | # description: Essential Tools for Working with Data 289 | # copies: 290 | # - owner: "@encukou" 291 | # url: http://shop.oreilly.com/product/0636920034919.do 292 | # language: 293 | # - Anglicky 294 | # tags: 295 | # - Data 296 | # - Python 297 | 298 | risky-iot: 299 | name: The Internet of Risky Things 300 | author: Sean Smith 301 | description: Trusting the Devices that Surround Us 302 | copies: 303 | - owner: "@encukou" 304 | url: http://shop.oreilly.com/product/0636920052784.do 305 | language: 306 | - Anglicky 307 | tags: 308 | - Ostatní 309 | 310 | data-science-from-scratch: 311 | name: Data Science from Scratch 312 | author: Joel Grus 313 | description: First Principles with Python 314 | copies: 315 | - owner: "@encukou" 316 | current: Lazebnicek # robjan@seznam.cz 317 | borrowed: 2018-06-19 # till August 318 | url: http://shop.oreilly.com/product/0636920033400.do 319 | language: 320 | - Anglicky 321 | tags: 322 | - Data 323 | 324 | pro-hackery: 325 | name: Python pro hackery a reverzní inženýrství 326 | author: Justin Seitz 327 | copies: 328 | - owner: "@yedpodtrzitko" 329 | keeper: "@encukou" 330 | url: https://www.zonerpress.cz/python-pro-hackery-a-reverzni-inzenyrstvi 331 | language: 332 | - Česky 333 | tags: 334 | - Python 335 | 336 | think-python: 337 | name: Think Python 338 | author: Allen B. Downey 339 | description: How to Think Like a Computer Scientist (pozor, používá Python 2.x) 340 | copies: 341 | - owner: "@encukou" 342 | url: http://www.greenteapress.com/thinkpython/ 343 | language: 344 | - Anglicky 345 | tags: 346 | - Python 347 | 348 | computer-vision: 349 | name: Programming Computer Vision with Python 350 | author: Jan Erik Solen 351 | description: (pozor, používá Python 2.x) 352 | copies: 353 | - owner: "@encukou" 354 | current: "@gr4viton" 355 | borrowed: 2017-08-26 356 | url: http://programmingcomputervision.com/ 357 | language: 358 | - Anglicky 359 | tags: 360 | - Python 361 | 362 | pro-django: 363 | name: Pro Django 364 | author: Marty Alchin 365 | description: Knížka o Djangu. Je o verzi 1.0, takže trošku zastaralá. 366 | copies: 367 | - owner: "@starenka" 368 | keeper: "@encukou" 369 | url: 370 | language: 371 | - Anglicky 372 | tags: 373 | - Web 374 | - Python 375 | 376 | practical-django-projects: 377 | name: Practical Django Projects 378 | author: James Bennett 379 | description: Knížka o Djangu. Je o verzi 0.96, takže trošku zastaralá. 380 | copies: 381 | - owner: "@starenka" 382 | keeper: "@encukou" 383 | url: http://www.amazon.com/Practical-Django-Projects-Experts-Development/dp/1590599969 384 | language: 385 | - Anglicky 386 | tags: 387 | - Web 388 | - Python 389 | 390 | django-definitive-guide: 391 | name: The Definitive Guide to Django 392 | author: A. Holovaty & J. Kaplan-Moss 393 | description: nížka o Djangu. Je o verzi 0.96, takže trošku zastaralá. 394 | copies: 395 | - owner: "@starenka" 396 | keeper: "@encukou" 397 | url: http://www.apress.com/9781430219361 398 | language: 399 | - Anglicky 400 | tags: 401 | - Web 402 | - Python 403 | 404 | how-learning-works: 405 | name: "How Learning Works: Seven Research-Based Principles for Smart Teaching" 406 | author: S. A. Ambrose, M. W. Bridges, M. DiPietro, M. C. Lovett, M. K. Norman 407 | description: O tom, jak učit. 408 | copies: 409 | - owner: "@encukou" 410 | current: Elena Bondarenko (RH Brno) 411 | borrowed: 2019-05-14 412 | url: http://www.amazon.com/How-Learning-Works-Research-Based-Principles/dp/0470484101 413 | language: 414 | - Anglicky 415 | tags: 416 | - Ostatní 417 | 418 | erlang-learn: 419 | name: Learn You Some Erlang for Great Good! A Beginner's Guide 420 | author: Fred Hebert 421 | copies: 422 | - owner: "@starenka" 423 | url: http://www.bookdepository.com/Learn-You-Some-Erlang-for-Great-Good-Beginners-Guide-Fred-Hebert/9781593274351 424 | language: 425 | - Anglicky 426 | tags: 427 | - Začátečník 428 | 429 | land-of-lisp: 430 | name: "Land of Lisp: Learn to Program in Lisp, One Game at a Time!" 431 | author: Conrad Barski 432 | copies: 433 | - owner: "@starenka" 434 | url: http://www.bookdepository.com/Land-Lisp-Learn-Program-Lisp-One-Game-at-Time-Conrad-Barski/978159327281 435 | language: 436 | - Anglicky 437 | tags: 438 | - Ostatní 439 | 440 | nlpp: 441 | name: Natural Language Processing with Python 442 | author: Steven Bird, Ewan Klein, Edward Loper 443 | copies: 444 | - owner: "@starenka" 445 | keeper: "@encukou" 446 | url: http://shop.oreilly.com/product/9780596516499.do 447 | language: 448 | - Anglicky 449 | tags: 450 | - Python 451 | 452 | xp: 453 | name: Extrémní programování 454 | author: Kent Beck 455 | copies: 456 | - owner: "@whit" 457 | url: http://www.databazeknih.cz/knihy/extremni-programovani-163700 458 | language: 459 | - Česky 460 | tags: 461 | - Ostatní 462 | 463 | microia: 464 | name: Microinteractions 465 | author: Dan Saffer 466 | copies: 467 | - owner: "@whit" 468 | url: http://microinteractions.com 469 | language: 470 | - Anglicky 471 | tags: 472 | - Ostatní 473 | 474 | wah: 475 | name: The Web Application Hacker's Handbook (první vydání) 476 | author: Dafydd Stuttard, Marcus Pinto 477 | description: Obstarožní, ale určitě si v ní někdo (stejně jako já) něco zajímavýho najde 478 | copies: 479 | - owner: "@starenka" 480 | url: http://books.google.cz/books/about/The_Web_Application_Hacker_s_Handbook.html?id=_EhvBGsWi6AC&redir_esc=y 481 | language: 482 | - Anglicky 483 | tags: 484 | - Web 485 | 486 | sqlperf: 487 | name: SQL Performance explained 488 | author: Markus Winand 489 | copies: 490 | - owner: "@honzakral" 491 | current: "@jsuchal" 492 | borrowed: 2015-06-22 493 | url: http://sql-performance-explained.com/ 494 | language: 495 | - Anglicky 496 | tags: 497 | - SQL 498 | 499 | cleancode: 500 | name: Clean Code 501 | author: Robert C. Martin 502 | copies: 503 | - owner: "@JirkaV" 504 | url: http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 505 | language: 506 | - Anglicky 507 | tags: 508 | - Ostatní 509 | 510 | networkfoundations: 511 | name: Foundations of Python Network Programming 512 | author: John Goerzen, Tim Bower, Brandon Rhodes 513 | copies: 514 | - owner: "@JirkaV" 515 | url: http://www.amazon.com/Foundations-Python-Network-Programming-comprehensive/dp/1430230037 516 | language: 517 | - Anglicky 518 | tags: 519 | - Python 520 | 521 | fedora-guide-cz: 522 | name: Fedora - Příručka začínajícího uživatele. 523 | author: Lukáš Kotek a kol. 524 | description: Seznámení a první kroky v linuxovém operačním systému Fedora 525 | copies: 526 | - owner: "@encukou" 527 | url: http://blog.eischmann.cz/2015/10/09/vydali-jsme-prirucku-zacinajiciho-uzivatele-fedory/ 528 | language: 529 | - Anglicky 530 | tags: 531 | - Ostatní 532 | 533 | mysql-okamzite: 534 | name: MySQL okamžitě 535 | author: Timothy Botonczyk 536 | copies: 537 | - owner: "@encukou" 538 | - owner: "@encukou" 539 | url: https://www.albatrosmedia.cz/tituly/34904988/my-sql-okamzite/ 540 | language: 541 | - Česky 542 | tags: 543 | - SQL 544 | 545 | sql-28-dni: 546 | name: Naučte se SQL za 28 dní 547 | author: Ryan Stephens, Ron Plew, Arie D. Jones 548 | copies: 549 | - owner: "@encukou" 550 | - owner: "@encukou" 551 | url: https://www.albatrosmedia.cz/tituly/8486921/naucte-se-sql-za-28-dni/ 552 | language: 553 | - Česky 554 | tags: 555 | - SQL 556 | 557 | zaciname-programovat: 558 | name: Začínáme programovat v jazyce Python 559 | author: Daryl Harms, Kenneth McDonald 560 | description: 2. opravené vydání. Zastaralá kniha o Pythonu 1.5. 561 | copies: 562 | - owner: "@encukou" 563 | current: David R. 564 | borrowed: 2015-09-20 565 | - owner: "@yedpodtrzitko" 566 | current: "Zuzka K. PL Brno" 567 | borrowed: 2018-10-08 568 | url: http://knihy.cpress.cz/zaciname-programovat-v-jazyce-python-d2.html 569 | language: 570 | - Anglicky 571 | tags: 572 | - Python 573 | - Začátečník 574 | 575 | high-performance-django: 576 | name: High Performance Django 577 | author: Peter Baumgarten, Yann Malet 578 | copies: 579 | - owner: "@honzakral" 580 | keeper: "@encukou" 581 | signed: True 582 | url: https://highperformancedjango.com/ 583 | language: 584 | - Anglicky 585 | tags: 586 | - Web 587 | - Python 588 | 589 | lightweight-django: 590 | name: Lightweight Django 591 | author: Julia Elman, Mark Lavin 592 | copies: 593 | - owner: "@honzakral" 594 | keeper: "@encukou" 595 | signed: True 596 | url: http://shop.oreilly.com/product/0636920032502.do 597 | language: 598 | - Anglicky 599 | tags: 600 | - Web 601 | - Python 602 | 603 | python-projects-for-kids: 604 | name: Python Projects for Kids 605 | author: Jessica Ingrassellino 606 | copies: 607 | - owner: "@Paffilda" 608 | url: https://books.google.cz/books/about/Python_Projects_for_Kids.html?id=KPnJDAAAQBAJ&source=kp_cover&redir_esc=y&hl=cs 609 | language: 610 | - Anglicky 611 | tags: 612 | - Python 613 | - Začátečník 614 | 615 | python-for-kids: 616 | name: Python for Kids 617 | author: Jason R. Briggs 618 | copies: 619 | - owner: "@Paffilda" 620 | - owner: "@encukou" 621 | url: https://www.nostarch.com/pythonforkids 622 | language: 623 | - Anglicky 624 | tags: 625 | - Python 626 | - Začátečník 627 | 628 | processing-py: 629 | name: "Make: Getting Started with Processing.py" 630 | author: Allison Parrish, Ben Fry, Casey Reas 631 | copies: 632 | - owner: "@encukou" 633 | url: https://www.amazon.com/Processing-py/dp/B01FIR0RY8/ 634 | language: 635 | - Anglicky 636 | tags: 637 | - Python 638 | 639 | zelvi-grafika: 640 | name: "Želví grafika" 641 | author: "Radek Pelánek" 642 | url: http://www.radekpelanek.cz/?zelva 643 | copies: 644 | - owner: "@encukou" 645 | current: Adam K. z Brna 646 | borrowed: 2019-04-22 647 | language: 648 | - Česky 649 | tags: 650 | - Python 651 | - Začátečník 652 | 653 | learning-python: 654 | name: Learning Python, 4th Edition 655 | author: Mark Lutz 656 | copies: 657 | - owner: "@PetraVidnerova" 658 | url: https://learning-python.com/about-lp4e.html 659 | language: 660 | - Anglicky 661 | tags: 662 | - Python 663 | 664 | javascript-the-good-parts: 665 | name: "JavaScript: The Good Parts" 666 | author: Douglas Crockford 667 | copies: 668 | - owner: "@PetraVidnerova" 669 | url: https://blog.root.cz/met/d-crockford-javascript-the-good-parts-extremni-recenze/ 670 | language: 671 | - Anglicky 672 | tags: 673 | - Ostatní 674 | 675 | python-tricks: 676 | name: "Python Tricks: The Book" 677 | author: Dan Bader 678 | description: A Buffet of Awesome Python Features 679 | copies: 680 | - owner: "@mportesdev" 681 | keeper: "@mportesdev" 682 | url: https://dbader.org/products/python-tricks-book/ 683 | language: 684 | - Anglicky 685 | tags: 686 | - Python 687 | 688 | thoughtful-machine-learning: 689 | name: "Thoughtful Machine Learning with Python" 690 | author: Matthew Kirk 691 | description: A Test-Driven Approach 692 | copies: 693 | - owner: "@encukou" 694 | url: http://shop.oreilly.com/product/0636920039082.do 695 | language: 696 | - Anglicky 697 | tags: 698 | - Python 699 | 700 | effective-pycharm: 701 | name: "Effective PyCharm" 702 | author: Michael Kennedy, Matt Harrison 703 | description: Learn the PyCharm IDE with a hands-on approach 704 | copies: 705 | - owner: "@mportesdev" 706 | keeper: "@mportesdev" 707 | current: "@encukou" 708 | borrowed: 2019-10-16 709 | url: https://effectivepycharm.com/ 710 | language: 711 | - Anglicky 712 | tags: 713 | - Python 714 | 715 | 716 | latex-pro-zacatecniky: 717 | name: "LaTeX pro začátečníky" 718 | author: Jiří Rybička 719 | description: Jedná se o 2. vydání. 720 | copies: 721 | - owner: "@PetraVidnerova" 722 | current: "@encukou" 723 | borrowed: 2019-11-20 724 | url: https://www.databazeknih.cz/knihy/latex-pro-zacatecniky-249759 725 | language: 726 | - Česky 727 | tags: 728 | - Ostatní 729 | - Začátečník 730 | 731 | 732 | tex-book-naruby: 733 | name: "TeX book naruby" 734 | author: Petr Olšák 735 | copies: 736 | - owner: "@PetraVidnerova" 737 | current: "@encukou" 738 | borrowed: 2019-11-20 739 | url: http://petr.olsak.net/tbn.html 740 | language: 741 | - Česky 742 | tags: 743 | - Ostatní 744 | 745 | 746 | text-adventure: 747 | name: "Make Your Own Python Text Adventure" 748 | author: Phillip Johnson 749 | copies: 750 | - owner: "@mportesdev" 751 | keeper: "@mportesdev" 752 | url: https://www.apress.com/gp/book/9781484232309 753 | language: 754 | - Anglicky 755 | tags: 756 | - Python 757 | - Začátečník 758 | 759 | 760 | designing-data-intensive-applications: 761 | name: "Designing Data Intensive Applications" 762 | author: Martin Kleppman 763 | copies: 764 | - owner: "@messa" 765 | url: https://dataintensive.net/ 766 | language: 767 | - Anglicky 768 | tags: 769 | - Ostatní 770 | 771 | 772 | cracking-codes: 773 | name: Cracking Codes with Python 774 | author: Al Sweigart 775 | description: An Introduction to Building and Breaking Ciphers 776 | copies: 777 | - owner: "@mportesdev" 778 | keeper: "@mportesdev" 779 | url: https://nostarch.com/crackingcodes 780 | language: 781 | - Anglicky 782 | tags: 783 | - Python 784 | - Začátečník 785 | 786 | python-prirucka: 787 | name: Python 788 | author: Rudolf Pecinovský 789 | description: Kompletní příručka jazyka pro verzi 3.8 790 | copies: 791 | - owner: "@mportesdev" 792 | keeper: "@mportesdev" 793 | url: https://www.grada.cz/python-11421 794 | language: 795 | - Česky 796 | tags: 797 | - Python 798 | - Začátečník 799 | 800 | python-101: 801 | name: Python 101 802 | author: Michael Driscoll 803 | description: 2nd Edition 804 | copies: 805 | - owner: "@mportesdev" 806 | keeper: "@mportesdev" 807 | signed: True 808 | url: https://leanpub.com/py101 809 | language: 810 | - Anglicky 811 | tags: 812 | - Python 813 | - Začátečník 814 | -------------------------------------------------------------------------------- /bookshelf.py: -------------------------------------------------------------------------------- 1 | import os 2 | import fnmatch 3 | import datetime 4 | import collections 5 | import json 6 | from pathlib import Path 7 | import functools 8 | 9 | from flask import Flask, render_template, url_for, abort, send_from_directory, jsonify 10 | from flask_frozen import Freezer 11 | from elsa import cli 12 | import yaml 13 | import markdown 14 | import markupsafe 15 | 16 | app = Flask(__name__) 17 | MISSING = object() 18 | 19 | base = Path(app.root_path) / "covers" 20 | 21 | 22 | @app.route('/data.json') 23 | def data(): 24 | books = read_yaml('books.yml') 25 | tags = set() 26 | language = set() 27 | today = datetime.date.today() 28 | for key, value in books.items(): 29 | value['img_url'] = '/img/' + str(key) + ".jpg" 30 | value['book_url'] = '/' + str(key) 31 | for book in value['copies']: 32 | if 'borrowed' in book: 33 | book['days'] = (today - book['borrowed']).days 34 | tags.update(value['tags']) 35 | language.update(value['language']) 36 | return jsonify({'books':books, 'tags':sorted(tags), 'language':sorted(language)}) 37 | 38 | 39 | @app.route('/') 40 | def index(): 41 | books = read_yaml('books.yml') 42 | if books is None: 43 | abort(404) 44 | today = datetime.date.today() 45 | return render_template('index.html', books=books,today=today,) 46 | 47 | 48 | @app.route('//') 49 | def book(book_slug): 50 | books = read_yaml('books.yml') 51 | book = books.get(book_slug) 52 | if book is None: 53 | abort(404) 54 | today = datetime.date.today() 55 | 56 | # Get the CC list (people who should be notified in the "borrow" 57 | # issue on GitHub). 58 | ccs = set() 59 | for copy in book['copies']: 60 | if 'keeper' in copy: 61 | # For some books the owner wants a `keeper` to handle the lending; 62 | # we don't bother the owner in that case. 63 | ccs.add(copy['keeper']) 64 | elif 'owner' in copy: 65 | ccs.add(copy['owner']) 66 | if 'current' in copy: 67 | # Always put in the current reader 68 | ccs.add(copy['current']) 69 | borrow_issue_body = render_template( 70 | 'borrow_issue.md', book_slug=book_slug, book=book, 71 | ccs=sorted(ccs), 72 | ) 73 | 74 | return render_template( 75 | 'book.html', 76 | book_slug=book_slug, 77 | book=book, 78 | today=today, 79 | borrow_issue_body=borrow_issue_body, 80 | ) 81 | 82 | 83 | @app.route('/info/') 84 | def info(): 85 | readme_contents = Path(__file__).parent.joinpath('README.md').read_text() 86 | instructions, sep, rest = readme_contents.partition('/g,"$1").replace(//g,"$1")),$o(o,t)&&(t=t.slice(1)),d.chars&&d.chars(t),""});a+=i.length-n.length,i=n,A(o,a-r,a)}else{var s=i.indexOf("<");if(0===s){if(fo.test(i)){var c=i.indexOf("--\x3e");if(0<=c){d.shouldKeepComment&&d.comment(i.substring(4,c)),C(c+3);continue}}if(po.test(i)){var l=i.indexOf("]>");if(0<=l){C(l+2);continue}}var u=i.match(uo);if(u){C(u[0].length);continue}var f=i.match(lo);if(f){var p=a;C(f[0].length),A(f[1],p,a);continue}var _=x();if(_){k(_),$o(v,i)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(0<=s){for($=i.slice(s);!(lo.test($)||so.test($)||fo.test($)||po.test($)||(w=$.indexOf("<",1))<0);)s+=w,$=i.slice(s);b=i.substring(0,s),C(s)}s<0&&(b=i,i=""),d.chars&&b&&d.chars(b)}if(i===e){d.chars&&d.chars(i);break}}function C(e){a+=e,i=i.substring(e)}function x(){var e=i.match(so);if(e){var t,n,r={tagName:e[1],attrs:[],start:a};for(C(e[0].length);!(t=i.match(co))&&(n=i.match(io));)C(n[0].length),r.attrs.push(n);if(t)return r.unarySlash=t[1],C(t[0].length),r.end=a,r}}function k(e){var t=e.tagName,n=e.unarySlash;m&&("p"===v&&ro(t)&&A(v),g(t)&&v===t&&A(t));for(var r,i,o,a=y(t)||!!n,s=e.attrs.length,c=new Array(s),l=0;l-1"+("true"===d?":("+l+")":":_q("+l+","+d+")")),Ar(c,"change","var $$a="+l+",$$el=$event.target,$$c=$$el.checked?("+d+"):("+v+");if(Array.isArray($$a)){var $$v="+(f?"_n("+p+")":p)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Er(l,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Er(l,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Er(l,"$$c")+"}",null,!0);else if("input"===$&&"radio"===w)r=e,i=_,a=(o=b)&&o.number,s=Or(r,"value")||"null",Cr(r,"checked","_q("+i+","+(s=a?"_n("+s+")":s)+")"),Ar(r,"change",Er(i,s),null,!0);else if("input"===$||"textarea"===$)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,l=o?"change":"range"===r?Pr:"input",u="$event.target.value";s&&(u="$event.target.value.trim()"),a&&(u="_n("+u+")");var f=Er(t,u);c&&(f="if($event.target.composing)return;"+f),Cr(e,"value","("+t+")"),Ar(e,l,f,null,!0),(s||a)&&Ar(e,"blur","$forceUpdate()")}(e,_,b);else if(!j.isReservedTag($))return Tr(e,_,b),!1;return!0},text:function(e,t){t.value&&Cr(e,"textContent","_s("+t.value+")")},html:function(e,t){t.value&&Cr(e,"innerHTML","_s("+t.value+")")}},isPreTag:function(e){return"pre"===e},isUnaryTag:to,mustUseProp:Sn,canBeLeftOpenTag:no,isReservedTag:Un,getTagNamespace:Vn,staticKeys:(Go=Wo,Go.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(","))},Qo=e(function(e){return s("type,tag,attrsList,attrsMap,plain,parent,children,attrs"+(e?","+e:""))});function ea(e,t){e&&(Zo=Qo(t.staticKeys||""),Xo=t.isReservedTag||O,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||c(e.tag)||!Xo(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(Zo)))}(t);if(1===t.type){if(!Xo(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function\s*\(/,na=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,ra={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ia={esc:"Escape",tab:"Tab",enter:"Enter",space:" ",up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete"]},oa=function(e){return"if("+e+")return null;"},aa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:oa("$event.target !== $event.currentTarget"),ctrl:oa("!$event.ctrlKey"),shift:oa("!$event.shiftKey"),alt:oa("!$event.altKey"),meta:oa("!$event.metaKey"),left:oa("'button' in $event && $event.button !== 0"),middle:oa("'button' in $event && $event.button !== 1"),right:oa("'button' in $event && $event.button !== 2")};function sa(e,t,n){var r=t?"nativeOn:{":"on:{";for(var i in e)r+='"'+i+'":'+ca(i,e[i])+",";return r.slice(0,-1)+"}"}function ca(t,e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return ca(t,e)}).join(",")+"]";var n=na.test(e.value),r=ta.test(e.value);if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(aa[s])o+=aa[s],ra[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=oa(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+="if(!('button' in $event)&&"+a.map(la).join("&&")+")return null;"),o&&(i+=o),"function($event){"+i+(n?"return "+e.value+"($event)":r?"return ("+e.value+")($event)":e.value)+"}"}return n||r?e.value:"function($event){"+e.value+"}"}function la(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=ra[e],r=ia[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var ua={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(t,n){t.wrapData=function(e){return"_b("+e+",'"+t.tag+"',"+n.value+","+(n.modifiers&&n.modifiers.prop?"true":"false")+(n.modifiers&&n.modifiers.sync?",true":"")+")"}},cloak:$},fa=function(e){this.options=e,this.warn=e.warn||$r,this.transforms=wr(e.modules,"transformCode"),this.dataGenFns=wr(e.modules,"genData"),this.directives=m(m({},ua),e.directives);var t=e.isReservedTag||O;this.maybeComponent=function(e){return!t(e.tag)},this.onceId=0,this.staticRenderFns=[]};function pa(e,t){var n=new fa(t);return{render:"with(this){return "+(e?da(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function da(e,t){if(e.staticRoot&&!e.staticProcessed)return va(e,t);if(e.once&&!e.onceProcessed)return ha(e,t);if(e.for&&!e.forProcessed)return f=t,v=(u=e).for,h=u.alias,m=u.iterator1?","+u.iterator1:"",y=u.iterator2?","+u.iterator2:"",u.forProcessed=!0,(d||"_l")+"(("+v+"),function("+h+m+y+"){return "+(p||da)(u,f)+"})";if(e.if&&!e.ifProcessed)return ma(e,t);if("template"!==e.tag||e.slotTarget){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=_a(e,t),i="_t("+n+(r?","+r:""),o=e.attrs&&"{"+e.attrs.map(function(e){return g(e.name)+":"+e.value}).join(",")+"}",a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)a=e.component,c=t,l=(s=e).inlineTemplate?null:_a(s,c,!0),n="_c("+a+","+ya(s,c)+(l?","+l:"")+")";else{var r=e.plain?void 0:ya(e,t),i=e.inlineTemplate?null:_a(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o':'
',0 4 |
5 |
6 | 7 |
8 |
9 |
10 |

{{ book.name }}

11 |
12 |
13 |

{{ book.author }}

14 |
15 | 16 |
17 |

{{ book.description }}

18 | 19 | 20 | 21 |
22 |

{{ book.language[0][0:-1] }}á verze

23 | {% for copy in book.copies %} 24 |
25 |
26 | {% macro person(name) %} 27 | {% if name[0] == '@' %} 28 | {{ name[1:] }} 29 | {% else %} 30 | {{ name }} 31 | {% endif %} 32 | {% endmacro %} 33 | 34 |

Majitel: 35 | {{ person(copy['owner']) }} 36 | {% if 'current' not in copy and 'keeper' not in copy %} 37 | 38 | {% endif %} 39 |

40 | 41 | {% if 'signed' in copy %} 42 | 43 | {% endif %} 44 |
45 | 46 | {% if copy.get('keeper') %} 47 |

O knihu se stará: 48 | {{ person(copy['keeper']) }} 49 | {% if 'current' not in copy %} 50 | {{ copy['days'] }} 51 | {% endif %}

52 | {% endif %} 53 | 54 | {% if 'current' in copy %} 55 |

Aktuálně u: 56 | {{ person(copy['current']) }} 57 | {% if 'borrowed' in copy %} 58 | od {{ copy['borrowed'].month }}/{{ copy['borrowed'].year }} 59 | {% endif %} 60 | {% if (today - copy['borrowed']).days < 31 %} 61 | {{ days }} 62 | {% else %} 63 | {{ copy['days'] }} 64 | {% endif %} 65 |

66 | {% endif %} 67 | 68 |
69 | {% endfor %} 70 | 87 |
88 |
89 |
90 | {% endblock content %} 91 | -------------------------------------------------------------------------------- /templates/borrow_issue.md: -------------------------------------------------------------------------------- 1 | Chci si půjčit knížku [{{ book.name }}]. 2 | 3 | Chci si ji převzít na Pyvu v ____. <- sem dopiš město a datum. 4 | Přehled Pyv najdeš na https://pyvo.cz/ 5 | 6 | {% if ccs -%} 7 | (cc {{ ccs | join(', ') }}) 8 | {% endif %} 9 | 10 | [{{ book.name }}]: {{ url_for('book', book_slug=book_slug, _external=True) }} 11 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout.html' %} 2 | 3 | {% block content %} 4 | 5 | 56 | 57 | {% endblock content %} 58 | 59 | {% block scripts %} 60 | 61 | {% endblock %} 62 | -------------------------------------------------------------------------------- /templates/info.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block content %} 3 |
4 |
5 | 6 | {{ instructions }} 7 | 8 |
9 |
10 | {% endblock content %} 11 | -------------------------------------------------------------------------------- /templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% block title %}Knihovnička{% endblock title %} 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 31 | 32 |
33 | {% block content %} 34 | {% endblock content%} 35 |
36 | 37 |
38 |
39 |

Uprav tuto stránku na GitHubu

40 |
41 |
42 | 43 | 44 | 45 | 46 | 47 | {% block scripts %} 48 | {% endblock scripts %} 49 | 50 | 51 | 52 | --------------------------------------------------------------------------------