| 1 | | ''Part of DjangoSpecifications'' |
| 2 | | |
| 3 | | = Producing HTML and PDF output from `docs` source = |
| 4 | | |
| 5 | | This is useful for both offline documentation '''and''' reading branch documentation that is usually not available on the web. |
| 6 | | |
| 7 | | #528 is a long-standing ticket that has a basic implementation. A better (perhaps?) approach with a working implementation is proposed below. |
| 8 | | |
| 9 | | '''NOTE THAT CSS COPYRIGHT ISSUES NEED TO BE SOLVED BEFORE THIS CAN BE MERGED.''' The CSS is Copyright (c) 2005 Lawrence Journal-World. Perhaps it can be shared at least with a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License? |
| 10 | | |
| 11 | | My patch is of course entirely in public domain. |
| 12 | | |
| 13 | | == Proposal == |
| 14 | | |
| 15 | | Generating offline documentation should work as follows: |
| 16 | | * there is a command '''builddocs''' that can be called from either `django-admin.py` or `manage.py` |
| 17 | | * that produces multiple-page HTML output from the docs by default, but accepts the option `--single` to produce single-page output [DONE] |
| 18 | | * PDF generation is less important, but should be implemented eventually, see http://code.google.com/p/rst2pdf (rather than pisa from http://www.htmltopdf.org/ as proposed in #528/#6443) |
| 19 | | * the converter tries to make the documentation look similar to web docs by |
| 20 | | * using (a subset of) the Django official CSS http://media.djangoproject.com/css/homepage.css (discuss copyright issues) [DONE] |
| 21 | | * using the customized docutils classes from source:djangoproject.com/django_website/apps/docs/builder.py [DONE] |
| 22 | | * the inter-page links should be converted to make them work properly (by extending the docutils classes) [DONE] |
| 23 | | * less important: external images from http://media.djangoproject.com/img/doc/ can be retrieved and image links converted accordingly (`--with-images` option perhaps?) |
| 24 | | |
| 25 | | == Implementation == |
| 26 | | |
| 27 | | The proposal has been implemented, inter-page links and table of contents work. Images have not been dealt with, I doubt if they are worth the trouble. CSS images are another thing though, but they are trivial to add, only copyright issues need to be sorted out. |
| 28 | | |
| 29 | | The final patch against [7321] is attached in attachment:build_htmldocs-links_work-with_docs.diff |
| 30 | | |
| 31 | | Usage: |
| 32 | | {{{ |
| 33 | | $ trunk/django/bin/django-admin.py help htmldocs |
| 34 | | Usage: django-admin.py htmldocs [options] [Django documentation directory] [output directory] |
| 35 | | |
| 36 | | Converts Django documentation to HTML. Uses the given Django documentation directory for reading |
| 37 | | documentation source and output directory for writing HTML files. Creates the output directory if it does not exist. |
| 38 | | |
| 39 | | Options: |
| 40 | | --settings=SETTINGS The Python path to a settings module, e.g. |
| 41 | | "myproject.settings.main". If this isn't provided, the |
| 42 | | DJANGO_SETTINGS_MODULE environment variable will be |
| 43 | | used. |
| 44 | | --pythonpath=PYTHONPATH |
| 45 | | A directory to add to the Python path, e.g. |
| 46 | | "/home/djangoprojects/myproject". |
| 47 | | --traceback Print traceback on exception |
| 48 | | --single Write a single combined HTML file. Not recommended, |
| 49 | | produces output that is harder to navigate. |
| 50 | | --version show program's version number and exit |
| 51 | | -h, --help show this help message and exit |
| 52 | | }}} |
| 53 | | |
| 54 | | This is an example run: |
| 55 | | {{{ |
| 56 | | $ trunk/django/bin/django-admin.py htmldocs trunk/docs foo |
| 57 | | Writing 'foo/add_ons.html'... done |
| 58 | | Writing 'foo/admin_css.html'... done |
| 59 | | Writing 'foo/apache_auth.html'... done |
| 60 | | Writing 'foo/api_stability.html'... done |
| 61 | | Writing 'foo/authentication.html'... done |
| 62 | | Writing 'foo/cache.html'... done |
| 63 | | Writing 'foo/contenttypes.html'... done |
| 64 | | Writing 'foo/contributing.html'... done |
| 65 | | Writing 'foo/csrf.html'... done |
| 66 | | Writing 'foo/custom_model_fields.html'... done |
| 67 | | Writing 'foo/databases.html'... done |
| 68 | | Writing 'foo/databrowse.html'... done |
| 69 | | Writing 'foo/db-api.html'... done |
| 70 | | Writing 'foo/design_philosophies.html'... done |
| 71 | | Writing 'foo/distributions.html'... done |
| 72 | | Writing 'foo/django-admin.html'... done |
| 73 | | Writing 'foo/documentation.html'... done |
| 74 | | Writing 'foo/email.html'... done |
| 75 | | Writing 'foo/faq.html'... done |
| 76 | | Writing 'foo/fastcgi.html'... done |
| 77 | | Writing 'foo/flatpages.html'... done |
| 78 | | Writing 'foo/form_for_model.html'... done |
| 79 | | Writing 'foo/form_preview.html'... done |
| 80 | | Writing 'foo/form_wizard.html'... done |
| 81 | | Writing 'foo/forms.html'... done |
| 82 | | Writing 'foo/generic_views.html'... done |
| 83 | | Writing 'foo/i18n.html'... done |
| 84 | | Writing 'foo/install.html'... done |
| 85 | | Writing 'foo/legacy_databases.html'... done |
| 86 | | Writing 'foo/localflavor.html'... done |
| 87 | | Writing 'foo/middleware.html'... done |
| 88 | | Writing 'foo/model-api.html'... done |
| 89 | | Writing 'foo/modelforms.html'... done |
| 90 | | Writing 'foo/modpython.html'... done |
| 91 | | Writing 'foo/newforms.html'... done |
| 92 | | Writing 'foo/outputting_csv.html'... done |
| 93 | | Writing 'foo/outputting_pdf.html'... done |
| 94 | | Writing 'foo/overview.html'... done |
| 95 | | Writing 'foo/pagination.html'... done |
| 96 | | Writing 'foo/redirects.html'... done |
| 97 | | Writing 'foo/release_notes_0.95.html'... done |
| 98 | | Writing 'foo/release_notes_0.96.html'... done |
| 99 | | Writing 'foo/request_response.html'... done |
| 100 | | Writing 'foo/serialization.html'... done |
| 101 | | Writing 'foo/sessions.html'... done |
| 102 | | Writing 'foo/settings.html'... done |
| 103 | | Writing 'foo/shortcuts.html'... done |
| 104 | | Writing 'foo/sitemaps.html'... done |
| 105 | | Writing 'foo/sites.html'... done |
| 106 | | Writing 'foo/static_files.html'... done |
| 107 | | Writing 'foo/syndication_feeds.html'... done |
| 108 | | Writing 'foo/templates.html'... done |
| 109 | | Writing 'foo/templates_python.html'... done |
| 110 | | Writing 'foo/testing.html'... done |
| 111 | | Writing 'foo/transactions.html'... done |
| 112 | | Writing 'foo/tutorial01.html'... done |
| 113 | | Writing 'foo/tutorial02.html'... done |
| 114 | | Writing 'foo/tutorial03.html'... done |
| 115 | | Writing 'foo/tutorial04.html'... done |
| 116 | | Writing 'foo/unicode.html'... done |
| 117 | | Writing 'foo/url_dispatch.html'... done |
| 118 | | Writing 'foo/webdesign.html'... done |
| 119 | | Writing index... done |
| 120 | | All done |
| 121 | | }}} |
| 122 | | |
| 123 | | A page from multi-page output looks like this: |
| 124 | | |
| 125 | | [[Image(Screenshot.png)]] |
| 126 | | |
| 127 | | The single-page output looks like this: |
| 128 | | |
| 129 | | [[Image(Screenshot_single.png)]] |
| | 1 | This page and several others were created by a wiki user who was not and is not affiliated with the Django project. Previous contents of this and other similar pages are not and should not be confused with [http://docs.djangoproject.com/ Django's own documentation], which remains the sole source of official documentation for the Django project. |