{"id":14972910,"url":"https://github.com/matagus/django-generic-links","last_synced_at":"2026-01-20T05:07:17.160Z","repository":{"id":3340465,"uuid":"4384815","full_name":"matagus/django-generic-links","owner":"matagus","description":"🗂️ Django application for associating links + metadata to any model instance","archived":false,"fork":false,"pushed_at":"2025-10-13T01:06:27.000Z","size":1526,"stargazers_count":20,"open_issues_count":0,"forks_count":7,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-10-26T20:43:16.270Z","etag":null,"topics":["django","django-application","django-generic-links","django-model","links","python","relationships","urls"],"latest_commit_sha":null,"homepage":"http://matagus.github.io/django-generic-links/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matagus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"matagus","custom":"https://www.paypal.me/matagus"}},"created_at":"2012-05-20T13:48:20.000Z","updated_at":"2025-10-13T01:05:57.000Z","dependencies_parsed_at":"2024-02-15T04:26:19.273Z","dependency_job_id":"81da1606-db8e-44ca-8e8b-87a3d827daa4","html_url":"https://github.com/matagus/django-generic-links","commit_stats":{"total_commits":120,"total_committers":8,"mean_commits":15.0,"dds":"0.16666666666666663","last_synced_commit":"4d92307b1064ef532b9db2f40cbcb4d37fe1ac88"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/matagus/django-generic-links","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matagus%2Fdjango-generic-links","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matagus%2Fdjango-generic-links/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matagus%2Fdjango-generic-links/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matagus%2Fdjango-generic-links/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matagus","download_url":"https://codeload.github.com/matagus/django-generic-links/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matagus%2Fdjango-generic-links/sbom","scorecard":{"id":623354,"data":{"date":"2025-08-11","repo":{"name":"github.com/matagus/django-generic-links","commit":"dfbd2a5031fe430010e24a8f1ed82db6e67a4187"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/9 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":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: .github/SECURITY.md:1","Info: Found linked content: .github/SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: .github/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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release.yml:14","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/labels.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/publish.yml:9","Warn: no topLevel permission defined: .github/workflows/release.yml:1"],"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/ci.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/labels.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/labels.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/labels.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/labels.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/matagus/django-generic-links/release.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:47","Warn: pipCommand not pinned by hash: .github/workflows/labels.yml:21","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:29","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:30","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   4 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":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/publish.yml:12"],"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"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":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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":"41 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2014-5 / GHSA-296w-6qhq-gf92","Warn: Project is vulnerable to: PYSEC-2011-2 / GHSA-3jqw-crqj-w8qw","Warn: Project is vulnerable to: PYSEC-2012-3 / GHSA-59w8-4wm2-4xw8","Warn: Project is vulnerable to: PYSEC-2012-4 / GHSA-5h2q-4hrp-v9rr","Warn: Project is vulnerable to: PYSEC-2014-6 / GHSA-625g-gx8c-xcmg","Warn: Project is vulnerable to: PYSEC-2015-8 / GHSA-6565-fg86-6jcx","Warn: Project is vulnerable to: PYSEC-2021-98 / GHSA-68w8-qjq3-2gfm","Warn: Project is vulnerable to: PYSEC-2012-2 / GHSA-78vx-ggch-wghm","Warn: Project is vulnerable to: PYSEC-2015-9 / GHSA-7fq8-4pv5-5w5c","Warn: Project is vulnerable to: PYSEC-2015-4 / GHSA-7qfw-j7hp-v45g","Warn: Project is vulnerable to: PYSEC-2011-9 / GHSA-7wph-fc4w-wqp2","Warn: Project is vulnerable to: GHSA-7xr5-9hcq-chf9","Warn: Project is vulnerable to: PYSEC-2014-2 / GHSA-89hj-xfx5-7q66","Warn: Project is vulnerable to: GHSA-8x94-hmjh-97hq","Warn: Project is vulnerable to: PYSEC-2016-2 / GHSA-c8c8-9472-w52h","Warn: Project is vulnerable to: PYSEC-2016-3 / GHSA-crhm-qpjc-cm64","Warn: Project is vulnerable to: PYSEC-2014-4 / GHSA-f7cm-ccfp-3q4r","Warn: Project is vulnerable to: PYSEC-2016-16 / GHSA-fp6p-5xvw-m74f","Warn: Project is vulnerable to: PYSEC-2011-8 / GHSA-fwr5-q9rx-294f","Warn: Project is vulnerable to: PYSEC-2015-5 / GHSA-gv98-g628-m9x5","Warn: Project is vulnerable to: PYSEC-2015-20 / GHSA-h582-2pch-3xv3","Warn: Project is vulnerable to: PYSEC-2011-5 / GHSA-h95j-h2rv-qrg4","Warn: Project is vulnerable to: GHSA-hmr4-m2h5-33qx","Warn: Project is vulnerable to: PYSEC-2015-6 / GHSA-jhjg-w2cp-5j44","Warn: Project is vulnerable to: PYSEC-2016-15 / GHSA-pw27-w7w4-9qc7","Warn: Project is vulnerable to: PYSEC-2015-10 / GHSA-q5qw-4364-5hhm","Warn: Project is vulnerable to: PYSEC-2011-4 / GHSA-rm2j-x595-q9cj","Warn: Project is vulnerable to: GHSA-rrqc-c2jx-6jgv","Warn: Project is vulnerable to: PYSEC-2014-1 / GHSA-rvq6-mrpv-m6rm","Warn: Project is vulnerable to: PYSEC-2014-7 / GHSA-rw75-m7gp-92m3","Warn: Project is vulnerable to: PYSEC-2019-16 / GHSA-vfq6-hq5r-27r6","Warn: Project is vulnerable to: PYSEC-2014-3 / GHSA-wqjj-hx84-v449","Warn: Project is vulnerable to: PYSEC-2011-3 / GHSA-wxg3-mfph-qg9w","Warn: Project is vulnerable to: PYSEC-2011-1 / GHSA-x88j-93vc-wpmp","Warn: Project is vulnerable to: PYSEC-2007-1","Warn: Project is vulnerable to: PYSEC-2008-1","Warn: Project is vulnerable to: PYSEC-2008-2","Warn: Project is vulnerable to: PYSEC-2009-3","Warn: Project is vulnerable to: PYSEC-2015-11","Warn: Project is vulnerable to: PYSEC-2015-7","Warn: Project is vulnerable to: PYSEC-2016-18"],"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-21T05:42:52.386Z","repository_id":3340465,"created_at":"2025-08-21T05:42:52.386Z","updated_at":"2025-08-21T05:42:52.386Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28596087,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T02:08:49.799Z","status":"ssl_error","status_checked_at":"2026-01-20T02:08:44.148Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","django-application","django-generic-links","django-model","links","python","relationships","urls"],"created_at":"2024-09-24T13:47:43.924Z","updated_at":"2026-01-20T05:07:17.149Z","avatar_url":"https://github.com/matagus.png","language":"Python","funding_links":["https://github.com/sponsors/matagus","https://www.paypal.me/matagus"],"categories":[],"sub_categories":[],"readme":"django-generic-links\n====================\n\n![Python Compatibility](https://img.shields.io/badge/python-3.12%20%7C%203.13%20%7C%203.14-blue.svg)\n![Django Compatibility](https://img.shields.io/badge/django-4.2%20|%205.0%20|%205.1%20|%205.2%20|%206.0-%2344B78B?labelColor=%23092E20)\n[![PyPi Version](https://img.shields.io/pypi/v/django-generic-links.svg)](https://pypi.python.org/pypi/django-generic-links)\n![CI badge](https://github.com/matagus/django-generic-links/actions/workflows/ci.yml/badge.svg)\n[![codecov](https://codecov.io/gh/matagus/django-generic-links/graph/badge.svg?token=a64SxEDQk0)](https://codecov.io/gh/matagus/django-generic-links)\n[![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)\n\nSimple app to attach links to any Django model. Compatible with Django 4.2 to 6.0 and Python 3.12 to 3.14.\n\nFeatures\n========\n\n- Model for creating generic link relations\n- Reverse Generic Relation (Django) for your models\n- Model Admin\n- Generic inline admin to manage any model's generic links\n- A template tag to get all links for a given model instance\n- A fully working example project\n\n\nInstallation\n============\n\nVia `pip` command:\n\n```bash\npip install django-generic-links\n```\n\n...or you can clone the repo and install it using `pip` too:\n\n```bash\ngit clone git://github.com/matagus/django-generic-links.git\ncd django-generic-links\npip install -e .\n```\n\nthen add `generic_links` to your `settings.py`:\n\n```python\nINSTALLED_APPS = (\n    # ...\n    \"generic_links\",\n)\n```\n\nthen run the migrations:\n\n```bash\npython manage.py migrate\n```\n\nand finally add the reverse generic relation to each of the models you're going to add generic links to:\n\n```python\nfrom django.db import models\nfrom django.contrib.contenttypes.fields import GenericRelation\n\n\nclass Artist(models.Model):\n    name = models.CharField(max_length=100)\n    bio = models.TextField()\n\n    # This is important so that we can get the GenericLink related instances for an object of this model\n    generic_links = GenericRelation(\"generic_links.GenericLink\")\n\n\nclass Album(models.Model):\n    title = models.CharField(max_length=100)\n    artist = models.ForeignKey(Artist, on_delete=models.CASCADE)\n    release_date = models.DateField(null=True, blank=True)\n\n    generic_links = GenericRelation(\"generic_links.GenericLink\")\n```\n\n\nUsage\n=====\n\nUsing django-generic-links models\n---------------------------------\n\n```python\n\u003e\u003e\u003e from generic_links.models import GenericLink\n\u003e\u003e\u003e from music.models import Artist\n\u003e\u003e\u003e\n\u003e\u003e\u003e # Get an artist from the database...\n\u003e\u003e\u003e lou_reed = Artist.objects.get(pk=1)\n\u003e\u003e\u003e lou_reed\n\u003cArtist: Lou Reed\u003e\n\u003e\u003e\u003e\n\u003e\u003e\u003e # Create the first link\n\u003e\u003e\u003e link1 = GenericLink(title=\"Wikipedia Page\", url=\"http://en.wikipedia.org/wiki/Lou_Reed\", content_object=lou_reed)\n\u003e\u003e\u003e link1.save()\n\u003e\u003e\u003e\n\u003e\u003e\u003e # and then a second one\n\u003e\u003e\u003e link2 = GenericLink(title=\"Encyclopaedia Britannica\", url=\"https://www.britannica.com/biography/Lou-Reed\",\ncontent_object=lou_reed)\n\u003e\u003e\u003e link2.save()\n\u003e\u003e\u003e\n\u003e\u003e\u003e # Now get all the links for the artist object:\n\u003e\u003e\u003e lou_reed.generic_links.all()\n\u003cQuerySet [\u003cGenericLink: Encyclopaedia Britannica :: https://www.britannica.com/biography/Lou-Reed\u003e,\n\u003cGenericLink: Wikipedia Page :: https://en.wikipedia.org/wiki/Lou_Reed\u003e]\u003e\n```\n\nGeneric Links Inline Admin\n--------------------------\n\nSince a `GenericLink` instance will be associated to another object you usually\nwish to show an inline model admin form in that model form.\n\n```python\nfrom django.contrib import admin\n\nfrom generic_links.admin import GenericLinkStackedInline\n\nfrom music_app.models import Artist\n\n\n@admin.register(Artist)\nclass ArtistAdmin(admin.ModelAdmin):\n    # ...\n    inlines = [GenericLinkStackedInline]\n```\n\n\nUsing django-generic-links templatetags\n---------------------------------------\n\nNow imagine you have an artist page. You're passing `artist` object using template\ncontext and you want to get all the links for it:\n\n```html\n{% load generic_links_tags %}\n\n\u003chl\u003e{{ artist.name }}\u003c/hl\u003e\n\u003cp\u003e{{ artist.description }}\u003c/p\u003e\n\u003ch2\u003eLinks for {{ artist.name }}\u003c/h2\u003e\n{% get_links_for artist as artist_links %}\n\u003cul\u003e\n{% for link in artist_links %}\n  \u003cli\u003e\u003ca href=\"{{ link.url }}\" title=\"{{ link.title }}\"\u003e{{ link.title }}\u003c/a\u003e\u003c/li\u003e\n{% endfor %}\n\u003c/ul\u003e\n```\n\n\nContributing\n============\n\nContributions are welcome! ❤️\n\nPlease read [Contributing.md](CONTRIBUTING.md) for detailed instructions on how to help.\n\nRunning Tests\n-------------\n\n`hatch run test:test` will run the tests in every Python + Django versions combination.\n\n`hatch run test.py3.14-5.2:test` will run them for python 3.14 and Django 5.2. Please see possible combinations using\n`hatch env show` (\"test\" matrix).\n\n\nLicense\n=======\n\n`django-generic-links` is released under a BSD License - see the `LICENSE` file\nfor more information.\n\n\nAcknowledgements\n================\n\nDevelop \u0026 built using [![Hatch project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg)](https://github.com/pypa/hatch) [![linting - Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) [![code style - black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nTools used in building this package:\n\n-   [Cookiecutter](https://github.com/audreyr/cookiecutter) and [cookiecutter-djangopackage](https://github.com/pydanny/cookiecutter-djangopackage) for rendering this package.\n\nPosts I learned from:\n\n- [Switching to Hatch](https://andrich.me/2023/08/switching-to-hatch/)\n- [Automate Hatch Publish with GitHub Actions](https://blog.pecar.me/automate-hatch-publish)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatagus%2Fdjango-generic-links","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatagus%2Fdjango-generic-links","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatagus%2Fdjango-generic-links/lists"}