It’s common for developers to build packages in Python that need auto-generated code documentation based off of Python strings.
To better support integrating that collection to your larger docs site, I’ve built out a {{<pdoc>}}
shortcode that enables you to automatically target links for:
- Supermodules
- Submodules
- Functions
- Classes
- Methods
How complex is the package?
If you are integrating pdoc documentation for a package that has submodules, use the default pdoc
shortcode. For simple packages without submodules, use pdoc-2
.
How it Works #
The {{<pdoc>}}
shortcode accepts 3 positional args: type
, target
, and linktitle
(optional). If linktitle
is not set, it automatically configures the link text as show in the following sections.
pdoc #
Type (arg0) | Target (arg1) | Result |
---|---|---|
supermodule | ~pkg.super |
/references/pkg/super |
submodule | ~pkg.super.sub |
/references/pkg/super |
function | ~pkg.super.func |
/references/pkg/super/sub#package.super.sub.func |
class | ~pkg.super.sub.class |
/references/pkg/super/sub#package.super.sub.class |
method | ~pkg.super.sub.class.meth |
/references/pkg/super/sub#pkg.super.sub.class.meth |
pdoc-2 #
Type (arg0) | Target (arg1) | Result |
---|---|---|
function | ~pkg.super.func_name |
/references/pkg.html#pkg.func |
class | ~pkg.super.sub.class |
/references/pkg.html#pkg.class |
method | ~pkg.super.sub.class.method |
/references/pkg.html#pkg.class.meth |
Examples #
- {{< pdoc-2 "function" "~demo-package.demo_function" >}}
- {{< pdoc-2 "class" "~demo-package.DemoClass" >}}
- {{< pdoc-2 "method" "~demo-package.DemoClass.demo_method" >}}
Source Code #
Want to change the main directory?
You can change the default directory where this shortcode looks for pdoc collections by updating the value of $baseurl
. Alternatively, you could make this shortcode more advanced and remove that static baseurl piece altogether.
<!-- layouts/shortcodes/det.html -->
{{ $type := index (.Params) 0 }}
{{ $path := index (.Params) 1 }}
{{ $title := index (.Params) 2}}
{{ $baseurl := "/references/" }}
{{ $anchor := "" }}
{{ $linkText := "" }}
{{ $trimmed_path := strings.TrimPrefix "~" $path }}
{{ $path_parts := split $trimmed_path "." }}
{{ if eq $type "supermodule" }}
{{/* url pattern for supermodule: {baseurl}/directory/supermodule/ */}}
{{ $baseurl = printf "%s%s/%s/" $baseurl (index $path_parts 0) (index $path_parts 1) }}
{{ $linkText = (index $path_parts 1) }}
{{ else if eq $type "submodule" }}
{{/* url pattern for submodule: {baseurl}/directory/supermodule/submodule.html */}}
{{ $baseurl = printf "%s%s/%s/%s.html" $baseurl (index $path_parts 0) (index $path_parts 1) (index $path_parts 2) }}
{{ $linkText = printf "%s.%s" (index $path_parts 2) (index $path_parts 1) }}
{{ else if eq $type "class" }}
{{/* url pattern for class: {baseurl}/directory/supermodule/submodule.html#directory.supermodule.submodule.class */}}
{{ $baseurl = printf "%s%s/%s/%s.html" $baseurl (index $path_parts 0) (index $path_parts 1) (index $path_parts 2) }}
{{ $anchor = printf "#%s.%s.%s.%s" (index $path_parts 0) (index $path_parts 1) (index $path_parts 2) (index $path_parts 3) }}
{{ $linkText = printf "%s.%s()" (index $path_parts 2) (index $path_parts 3) }}
{{ else if eq $type "function" }}
{{/* url pattern for function: {baseurl}/directory/supermodule/submodule.html#directory.supermodule.submodule.function */}}
{{ $baseurl = printf "%s%s/%s/%s.html" $baseurl (index $path_parts 0) (index $path_parts 1) (index $path_parts 2) }}
{{ $anchor = printf "#%s.%s.%s.%s" (index $path_parts 0) (index $path_parts 1) (index $path_parts 2) (index $path_parts 3) }}
{{ $linkText = printf "%s.%s()" (index $path_parts 2) (index $path_parts 3) }}
{{ else if eq $type "method" }}
{{/* url pattern for method: {baseurl}/directory/supermodule/submodule.html#directory.supermodule.submodule.class.method */}}
{{ $baseurl = printf "%s%s/%s/%s.html" $baseurl (index $path_parts 0) (index $path_parts 1) (index $path_parts 2) }}
{{ $anchor = printf "#%s.%s.%s.%s.%s" (index $path_parts 0) (index $path_parts 1) (index $path_parts 2) (index $path_parts 3) (index $path_parts 4) }}
{{ $linkText = printf "%s.%s.%s()" (index $path_parts 2) (index $path_parts 3) (index $path_parts 4) }}
{{else}}
{{ errorf "The %q shortcode requires a type parameter as arg 0 (module, submodule, class, function, method). See %s" .Name .Position }}
{{ end }}
<a href="{{ $baseurl }}{{ $anchor }}" class="font-bold underline">{{with $title}}{{.}}{{else}}{{ $linkText }}{{end}}</a>