{"id":13415756,"url":"https://github.com/fabiocaccamo/django-freeze","last_synced_at":"2026-05-11T11:08:06.979Z","repository":{"id":57420151,"uuid":"44330200","full_name":"fabiocaccamo/django-freeze","owner":"fabiocaccamo","description":":ice_cube: convert your dynamic django site to a static one with one line of code.","archived":false,"fork":false,"pushed_at":"2026-04-13T14:08:04.000Z","size":283,"stargazers_count":105,"open_issues_count":3,"forks_count":16,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-04-13T16:09:53.441Z","etag":null,"topics":["django","download","freeze","generate","generator","html","medusa","offline","pypi","python","site","static","website","zip"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fabiocaccamo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["fabiocaccamo"],"ko_fi":"fabiocaccamo","custom":["https://www.buymeacoffee.com/fabiocaccamo","https://www.paypal.me/fabiocaccamo"]}},"created_at":"2015-10-15T16:20:55.000Z","updated_at":"2026-04-13T14:07:57.000Z","dependencies_parsed_at":"2023-09-28T22:20:14.810Z","dependency_job_id":"36d82d45-b1ac-4d7e-a0ee-bc1338f204b7","html_url":"https://github.com/fabiocaccamo/django-freeze","commit_stats":{"total_commits":209,"total_committers":7,"mean_commits":"29.857142857142858","dds":"0.19617224880382778","last_synced_commit":"928fec12d580e4039cf49121bbf51a8ba36edf12"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/fabiocaccamo/django-freeze","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiocaccamo%2Fdjango-freeze","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiocaccamo%2Fdjango-freeze/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiocaccamo%2Fdjango-freeze/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiocaccamo%2Fdjango-freeze/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fabiocaccamo","download_url":"https://codeload.github.com/fabiocaccamo/django-freeze/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabiocaccamo%2Fdjango-freeze/sbom","scorecard":{"id":389954,"data":{"date":"2025-08-11","repo":{"name":"github.com/fabiocaccamo/django-freeze","commit":"662be214051074260051ea704fbdbd9475ab0ca9"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.3,"checks":[{"name":"Maintained","score":4,"reason":"5 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Security-Policy","score":3,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Warn: no linked content found","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/27 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:27","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:28","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/create-release.yml:1","Warn: no topLevel permission defined: .github/workflows/test-package.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/create-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/create-release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/create-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/create-release.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/create-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-release.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/create-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/create-release.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/create-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-package.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/test-package.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-package.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/test-package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-package.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/test-package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-package.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/test-package.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-package.yml:101: update your workflow using https://app.stepsecurity.io/secureworkflow/fabiocaccamo/django-freeze/test-package.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/create-release.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/create-release.yml:38","Warn: pipCommand not pinned by hash: .github/workflows/test-package.yml:79","Warn: pipCommand not pinned by hash: .github/workflows/test-package.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/test-package.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/test-package.yml:88","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned","Info:   0 out of   6 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/create-release.yml:9"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 1 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"33 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2022-190 / GHSA-2gwj-7jmv-h26r","Warn: Project is vulnerable to: PYSEC-2020-32 / GHSA-2m34-jcjv-45xf","Warn: Project is vulnerable to: PYSEC-2020-36 / GHSA-3gh2-xw74-jmcw","Warn: Project is vulnerable to: PYSEC-2022-1 / GHSA-53qw-q765-4fww","Warn: Project is vulnerable to: PYSEC-2021-98 / GHSA-68w8-qjq3-2gfm","Warn: Project is vulnerable to: GHSA-6c3j-c64m-qhgq","Warn: Project is vulnerable to: PYSEC-2019-10 / GHSA-6c7v-2f49-8h26","Warn: Project is vulnerable to: PYSEC-2022-20 / GHSA-6cw3-g6wv-c2xv","Warn: Project is vulnerable to: PYSEC-2019-13 / GHSA-6r97-cj55-9hrq","Warn: Project is vulnerable to: PYSEC-2019-79 / GHSA-7rp2-fm2h-wchj","Warn: Project is vulnerable to: GHSA-7xr5-9hcq-chf9","Warn: Project is vulnerable to: PYSEC-2022-2 / GHSA-8c5j-9r9f-c6w8","Warn: Project is vulnerable to: GHSA-8x94-hmjh-97hq","Warn: Project is vulnerable to: PYSEC-2022-19 / GHSA-95rw-fx8r-36v6","Warn: Project is vulnerable to: PYSEC-2019-11 / GHSA-c4qh-4vgv-qc6g","Warn: Project is vulnerable to: PYSEC-2020-34 / GHSA-fr28-569j-53c4","Warn: Project is vulnerable to: PYSEC-2021-9 / GHSA-fvgf-6h6h-3322","Warn: Project is vulnerable to: PYSEC-2019-12 / GHSA-h5jv-4p7w-64jg","Warn: Project is vulnerable to: PYSEC-2020-35 / GHSA-hmr4-m2h5-33qx","Warn: Project is vulnerable to: PYSEC-2019-15 / GHSA-hvmf-r92r-27hr","Warn: Project is vulnerable to: PYSEC-2022-3 / GHSA-jrh2-hc4r-7jwx","Warn: Project is vulnerable to: PYSEC-2020-33 / GHSA-m6gj-h9gm-gw44","Warn: Project is vulnerable to: PYSEC-2021-99 / GHSA-p99v-5w3c-jqq9","Warn: Project is vulnerable to: PYSEC-2021-8 / GHSA-qm57-vhq3-3fwf","Warn: Project is vulnerable to: GHSA-rrqc-c2jx-6jgv","Warn: Project is vulnerable to: PYSEC-2021-7 / GHSA-rxjp-mfm9-w4wr","Warn: Project is vulnerable to: PYSEC-2021-439 / GHSA-v6rh-hp5x-86rv","Warn: Project is vulnerable to: PYSEC-2019-14 / GHSA-v9qg-3j8p-r63v","Warn: Project is vulnerable to: PYSEC-2019-16 / GHSA-vfq6-hq5r-27r6","Warn: Project is vulnerable to: PYSEC-2022-191 / GHSA-w24h-v9qh-8gxj","Warn: Project is vulnerable to: PYSEC-2020-31 / GHSA-wpjr-j57x-wxfw","Warn: Project is vulnerable to: PYSEC-2021-6 / GHSA-xgxc-v2qg-chmh","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T17:34:10.453Z","repository_id":57420151,"created_at":"2025-08-18T17:34:10.453Z","updated_at":"2025-08-18T17:34:10.453Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32892013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-10T13:40:02.631Z","status":"online","status_checked_at":"2026-05-11T02:00:05.975Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","download","freeze","generate","generator","html","medusa","offline","pypi","python","site","static","website","zip"],"created_at":"2024-07-30T21:00:51.876Z","updated_at":"2026-05-11T11:08:06.972Z","avatar_url":"https://github.com/fabiocaccamo.png","language":"Python","funding_links":["https://github.com/sponsors/fabiocaccamo","https://ko-fi.com/fabiocaccamo","https://www.buymeacoffee.com/fabiocaccamo","https://www.paypal.me/fabiocaccamo"],"categories":["Third-Party Packages"],"sub_categories":["General"],"readme":"[![](https://img.shields.io/pypi/pyversions/django-freeze.svg?color=3776AB\u0026logo=python\u0026logoColor=white)](https://www.python.org/)\n[![](https://img.shields.io/pypi/djversions/django-freeze?color=0C4B33\u0026logo=django\u0026logoColor=white\u0026label=django)](https://www.djangoproject.com/)\n\n[![](https://img.shields.io/pypi/v/django-freeze.svg?color=blue\u0026logo=pypi\u0026logoColor=white)](https://pypi.org/project/django-freeze/)\n[![](https://static.pepy.tech/badge/django-freeze/month)](https://pepy.tech/project/django-freeze)\n[![](https://img.shields.io/github/stars/fabiocaccamo/django-freeze?logo=github\u0026style=flat)](https://github.com/fabiocaccamo/django-freeze/stargazers)\n[![](https://img.shields.io/pypi/l/django-freeze.svg?color=blue)](https://github.com/fabiocaccamo/django-freeze/blob/main/LICENSE.txt)\n\n[![](https://results.pre-commit.ci/badge/github/fabiocaccamo/django-freeze/main.svg)](https://results.pre-commit.ci/latest/github/fabiocaccamo/django-freeze/main)\n[![](https://img.shields.io/github/actions/workflow/status/fabiocaccamo/django-freeze/test-package.yml?branch=main\u0026label=build\u0026logo=github)](https://github.com/fabiocaccamo/django-freeze)\n[![](https://img.shields.io/codecov/c/gh/fabiocaccamo/django-freeze?logo=codecov)](https://codecov.io/gh/fabiocaccamo/django-freeze)\n[![](https://img.shields.io/codacy/grade/54187bdf124644189791041589292e1b?logo=codacy)](https://www.codacy.com/app/fabiocaccamo/django-freeze)\n[![](https://img.shields.io/badge/code%20style-black-000000.svg?logo=python\u0026logoColor=black)](https://github.com/psf/black)\n[![](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/fabiocaccamo/django-freeze/badge)](https://securityscorecards.dev/viewer/?uri=github.com/fabiocaccamo/django-freeze)\n\n# django-freeze\ndjango-freeze generates the static version of your django site.\n\nJust run `python manage.py generate_static_site` :)\n\n## Features\n\n- **Generate** the **static version** of your Django site, optionally compressed **.zip file**\n- **Generate/download** the static site using **urls** *(only superuser and staff)*\n- Follow **sitemap.xml** urls\n- Follow **internal links** founded in each page\n- Follow **redirects**\n- **Report** invalid/broken urls\n- Selectively **include/exclude media and static files**\n- Custom **base url** *(very useful if the static site will run in a specific folder different by the document-root)*\n- Convert urls to **relative urls** *(very useful if the static site will run offline or in an unknown folder different by the document-root)*\n- Prevent local directory index\n\n## Installation\n\n- Run `pip install django-freeze`\n- Add `freeze` to `settings.INSTALLED_APPS`\n- Enable the `sites` framework (instructions [here](https://docs.djangoproject.com/en/4.1/ref/contrib/sites/#enabling-the-sites-framework))\n- Restart your application server\n\n## Configuration (optional)\n\nAll these settings are optional, if not defined in `settings.py` the default values (listed below) will be used.\n\n```python\n\n#the absolute path where to store the .zip and the html files\n#default value is a folder named 'freeze' located as sibling of 'settings.MEDIA_ROOT'\nFREEZE_ROOT = '/...'\n\n#tells 'freeze' if the urls should be fetched using https instead of http protocol (only if FREEZE_SITE_URL is not defined)\nFREEZE_USE_HTTPS = False\n\n#the site-url to crawl, if not specified it will be autodetected using the sites app\nFREEZE_SITE_URL = 'http://mydomain.com'\n\n#the base-url for all links relative to root '/'\n#useful if the generated static site will run in a specific folder which is not the document-root\nFREEZE_BASE_URL = None\n\n#if True 'freeze' will convert all absolute urls to relative urls\n#useful if the generated static site will run locally (file://) or in an unknown folder which is not the document-root (only if FREEZE_BASE_URL is not defined)\nFREEZE_RELATIVE_URLS = False\n\n#if True 'freeze' will inject a script at the end of each page\n#which will force hrefs like 'path/' to 'path/index.html' (only if the site is running under file://)\n#useful if the generated static site will run locally (requires FREEZE_RELATIVE_URLS set to True) to prevent local directory index\nFREEZE_LOCAL_URLS = False\n\n#if True 'freeze' will fetch each url founded in sitemap.xml\nFREEZE_FOLLOW_SITEMAP_URLS = True\n\n#if True 'freeze' will follow and fetch recursively each link-url founded in each page\nFREEZE_FOLLOW_HTML_URLS = True\n\n#if true 'freeze' will send an email to managers containing the list of all invalid urls (404, 500, etc..)\nFREEZE_REPORT_INVALID_URLS = False\n\n#the invalid urls email report subject\nFREEZE_REPORT_INVALID_URLS_SUBJECT = '[freeze] invalid urls'\n\n#if True the generated site will contain also the MEDIA folder and ALL its content\nFREEZE_INCLUDE_MEDIA = True\n#elif the value is a list or tuple only the specified directories will be included\nFREEZE_INCLUDE_MEDIA = ('cache', 'images', 'videos', )\n\n#if True the generated site will contain also the STATIC folder and ALL its content\nFREEZE_INCLUDE_STATIC = True\n#elif the value is a list or tuple only the specified directories will be included\nFREEZE_INCLUDE_STATIC = ('myapp1', 'myapp2', 'myapp3', )\n\n#if True the generated site will be zipped, the *.zip file will be created in FREEZE_ROOT\nFREEZE_ZIP_ALL = False\n\n#the name of the zip file created\nFREEZE_ZIP_NAME = 'freeze'\n\n#The request headers to use during the get requests that scrape the site\n#can be used to set Authentication headers, by default sets the user-agent\nFREEZE_REQUEST_HEADERS = {'user-agent': 'django-freeze'}\n```\n\nAdd **freeze.urls** to `urls.py` if you want superusers and staff able to use freeze urls.\n\n```python\nurlpatterns = patterns('',\n    ...\n    url(r'^freeze/', include('freeze.urls')),\n    ...\n)\n```\n\n## Usage\n\n#### Terminal\n\nRun `python manage.py generate_static_site`\n\n#### URLs\nSuperusers and staff can use the following urls to **download a .zip** containing the generated static site or to just generate the static website.\n\n`/freeze/download-static-site/`\n\n`/freeze/generate-static-site/`\n\n*(the time necessary to generate the static site depends on the size of the project)*\n\n## TODO\n- Write tests\n- Add `sitemap.xml` and `robots.txt` to the generated static site\n\n## Testing\n```bash\n# clone repository\ngit clone https://github.com/fabiocaccamo/django-extra-settings.git \u0026\u0026 cd django-extra-settings\n\n# create virtualenv and activate it\npython -m venv venv \u0026\u0026 . venv/bin/activate\n\n# upgrade pip\npython -m pip install --upgrade pip\n\n# install requirements\npip install -r requirements.txt -r requirements-test.txt\n\n# install pre-commit to run formatters and linters\npre-commit install --install-hooks\n\n# run tests\ntox\n# or\npython runtests.py\n# or\npython -m django test --settings \"tests.settings\"\n```\n\n## License\nReleased under [MIT License](LICENSE.txt).\n\n---\n\n## Supporting\n\n- :star: Star this project on [GitHub](https://github.com/fabiocaccamo/django-extra-settings)\n- :octocat: Follow me on [GitHub](https://github.com/fabiocaccamo)\n- :blue_heart: Follow me on [Bluesky](https://bsky.app/profile/fabiocaccamo.bsky.social)\n- :moneybag: Sponsor me on [Github](https://github.com/sponsors/fabiocaccamo)\n\n## See also\n\n- [`django-admin-interface`](https://github.com/fabiocaccamo/django-admin-interface) - the default admin interface made customizable by the admin itself. popup windows replaced by modals. 🧙 ⚡\n\n- [`django-cache-cleaner`](https://github.com/fabiocaccamo/django-cache-cleaner) - clear the entire cache or individual caches easily using the admin panel or management command. 🧹✨\n\n- [`django-colorfield`](https://github.com/fabiocaccamo/django-colorfield) - simple color field for models with a nice color-picker in the admin. 🎨\n\n- [`django-email-validators`](https://github.com/fabiocaccamo/django-email-validators) - no more invalid or disposable emails in your database. ✉️ ✅\n\n- [`django-extra-settings`](https://github.com/fabiocaccamo/django-extra-settings) - config and manage typed extra settings using just the django admin. ⚙️\n\n- [`django-maintenance-mode`](https://github.com/fabiocaccamo/django-maintenance-mode) - shows a 503 error page when maintenance-mode is on. 🚧 🛠️\n\n- [`django-redirects`](https://github.com/fabiocaccamo/django-redirects) - redirects with full control. ↪️\n\n- [`django-treenode`](https://github.com/fabiocaccamo/django-treenode) - probably the best abstract model / admin for your tree based stuff. 🌳\n\n- [`python-benedict`](https://github.com/fabiocaccamo/python-benedict) - dict subclass with keylist/keypath support, I/O shortcuts (base64, csv, json, pickle, plist, query-string, toml, xml, yaml) and many utilities. 📘\n\n- [`python-codicefiscale`](https://github.com/fabiocaccamo/python-codicefiscale) - encode/decode Italian fiscal codes - codifica/decodifica del Codice Fiscale. 🇮🇹 💳\n\n- [`python-fontbro`](https://github.com/fabiocaccamo/python-fontbro) - friendly font operations. 🧢\n\n- [`python-fsutil`](https://github.com/fabiocaccamo/python-fsutil) - file-system utilities for lazy devs. 🧟‍♂️\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabiocaccamo%2Fdjango-freeze","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffabiocaccamo%2Fdjango-freeze","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabiocaccamo%2Fdjango-freeze/lists"}